学ぶ › TypeScript
基礎 · 03
入力を受け取る
キーボード(標準入力)から文字と数を読みます。
問題を解くには入力(標準入力)を読む必要があります。
下の例は1行目の名前と2行目の数を読み、あいさつをしてその数の2倍を表示します。
name = input()n = int(input())print("Hi, " + name + "!")print(n * 2)const lines = require("fs").readFileSync(0, "utf8").split("\n");const name = lines[0];const n = Number(lines[1]);console.log("Hi, " + name + "!");console.log(n * 2);import { readFileSync } from "node:fs";const lines: string[] = readFileSync(0, "utf8").split("\n");const name: string = lines[0];const n: number = Number(lines[1]);console.log("Hi, " + name + "!");console.log(n * 2);import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String name = sc.nextLine(); int n = Integer.parseInt(sc.nextLine().trim()); System.out.println("Hi, " + name + "!"); System.out.println(n * 2); }}using System; class Program{ static void Main() { string name = Console.ReadLine(); int n = int.Parse(Console.ReadLine()); Console.WriteLine("Hi, " + name + "!"); Console.WriteLine(n * 2); }}#include <iostream>#include <string> int main() { std::string name; int n; std::getline(std::cin, name); std::cin >> n; std::cout << "Hi, " << name << "!" << '\n'; std::cout << n * 2 << '\n';}#include <stdio.h> int main(void) { char name[100]; int n; scanf("%99s", name); scanf("%d", &n); printf("Hi, %s!\n", name); printf("%d\n", n * 2); return 0;}name = コンソール.行読み();n = コンソール.行読み().数に();コンソール.書く("Hi, " + name + "!");コンソール.書く(n * 2);Lara 3
Hi, Lara! 6
ポイント
- 読んだものは常に文字列です。
数として使うには変換します。 - 入力は1行ずつ読むことも、空白で区切られたかたまり(単語や数)を一つずつ読むこともできます。
- 1行に数が複数あるときは、空白で分けてから一つずつ数に変えます。
- 何行あるかわからないときは、入力が終わるまで読みます。
「終わった」の知らせ方は言語ごとに違います。
言語ごとの書き方
| Python | 1行は input()、数へは int(...)。1行の複数の数は map(int, input().split())。最後までは for line in sys.stdin: |
|---|---|
| JavaScript | 全体を require("fs").readFileSync(0, "utf8") で一度に読み、split("\n") で行に分けるのがいちばん一般的です。数へは Number(...)。単語単位なら .trim().split(/\s+/) が安全です |
| TypeScript | JavaScript と同じです |
| Java | Scanner の nextLine() で読み、Integer.parseInt(...) で変換します。数を1つだけ読む nextInt() もあります。最後までは while (sc.hasNextInt()) |
| C# | Console.ReadLine() で読み、int.Parse(...) で変換します。複数の数は Split(' ')。最後までは while ((line = Console.ReadLine()) != null) |
| C++ | std::cin >> n は空白や改行を飛ばして一かたまりをそのまま数として読みます。1行全体は std::getline(std::cin, s)。最後までは while (std::cin >> x) |
| C | scanf("%d", &n) — 変数の前の & は必須です。%s は空白の手前までの1語しか読まないので、1行全体は fgets。最後までは while (scanf("%d", &x) == 1) |
| Craykon | 1行は コンソール.行読み()、数へは .数に()。1行の複数の数は コンソール.数読み()(数のリストで返します)。最後までは コンソール.行読み() が なし を返すまで |
よくある間違い
空行を数に変えたJavaScript · TypeScript
Number("")→ エラーにならず 0 になるので、空行を読んだミスが隠れます
入力の最後の改行のせいで、末尾に空文字列がもう1つできます。.trim() してから分けます。
数を読んだ直後に行を読んだJava · C++
int n = sc.nextInt();
String name = sc.nextLine();→ name は次の行ではなく空文字列 "" です。数のあとに残った改行だけを読んだからです
この例のように、最初から nextLine() で行ごと読み、Integer.parseInt で変換します。
C++ で cin >> n のあとの getline も同じです。
言語ごとの違い
読んだ値は文字列なので、変換せずに計算するとおかしくなります。
JavaScript で入力
読んだ値は文字列なので、変換せずに計算するとおかしくなります。
JavaScript で入力
3 に 1 を足すと "3" + 1 → "31" になり、Python の input() + 1 は TypeError です。