基础 · 03
读取输入
从键盘(标准输入)读取文字和数字。
要解题就得读取输入(标准输入)。
下面的例子读入一行名字和一行数字,然后打招呼,并输出这个数的两倍。
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
要点
- 读到的东西永远是字符串。
要当数字用,就得转换。 - 输入可以一行一行地读,也可以按空白分隔,一块一块(单词或数字)地读。
- 一行里有多个数时,先按空格拆开,再逐个转成数字。
- 不知道有几行时,就一直读到输入结束。
各语言表示“结束了”的方式不同。
各语言的写法
| Python | 读一行用 input(),转数字用 int(...)。一行多个数用 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(...) 转换。也有只读一个数的 nextInt()。读到末尾用 while (sc.hasNextInt()) |
| C# | 用 Console.ReadLine() 读,用 int.Parse(...) 转换。多个数用 Split(' ')。读到末尾用 while ((line = Console.ReadLine()) != null) |
| C++ | std::cin >> n 会跳过空格和换行,读一块内容直接转成数字。整行用 std::getline(std::cin, s)。读到末尾用 while (std::cin >> x) |
| C | scanf("%d", &n) — 变量前一定要有 &。%s 只读到空格前的一个单词,整行用 fgets。读到末尾用 while (scanf("%d", &x) == 1) |
| Craykon | 读一行用 控制台.读行(),转数字用 .转数字()。一行多个数用 控制台.读数字()(给出数字列表)。读到 控制台.读行() 返回 空 为止 |
常见错误
读完数字马上读一行Java · C++
int n = sc.nextInt();
String name = sc.nextLine();→ name 不是下一行,而是空字符串 "":它只读到了数字后面剩下的换行
像本例这样,从一开始就用 nextLine() 整行读取,再用 Integer.parseInt 转换。
C++ 中 cin >> n 之后的 getline 也一样。
把空行转成数字JavaScript · TypeScript
Number("")→ 不报错,得到 0,读到空行的错误就被掩盖了
输入末尾的换行会让最后多出一个空字符串。
先 .trim() 再拆分。
各语言的差异
读到的值是字符串,不转换就计算会出错。
在 JavaScript 中给输入的
读到的值是字符串,不转换就计算会出错。
在 JavaScript 中给输入的
3 加 1,结果是 "3" + 1 → "31";Python 的 input() + 1 会报 TypeError。