怎样把含有空格的一行整行读进来,因语言而异。 Python input()、Java BufferedReader.readLine()·Scanner.nextLine()、C# Console.ReadLine()、C++ std::getline(std::cin, s)、Craykon 控制台.读行() 读入一行,并去掉行尾的换行符再交给你。 JS、TS 一次读完全部输入,再用 split("\n") 分成行。 只有 C 的 fgets 会把换行符也放进缓冲区,要自己去掉(s[strcspn(s, "\n")] = '\0')。 不去掉的话,样例 1 的 ] 会掉到下一行。 第一个陷阱是按单词读。 C++ cin >> name 和 C scanf("%s") 遇到空格就停,样例 1 的名字变成 Kim,留言的位置成了 Min。 第二个陷阱是读完数字紧接着读行。 C++ cin >> n、Java Scanner.nextInt()、C scanf("%d") 只读数字,把第一行末尾的换行符留在那里。 紧跟着的 getline·nextLine()·fgets 读到的就是剩下的空行,样例 1 变成 #27 [] Kim Min Su。 把数字也按行读入再转换(Java Integer.parseInt(br.readLine()),C 用 fgets 后 atoi),或者在 C++ 中用 cin.ignore 丢掉剩下的换行符。 第三个陷阱是分开后再接回去。 Python " ".join(input().split()) 会把 So 和 quiet 之间的两个空格缩成一个。
Pythonmain.py · 4 行
n = int(input())name = input() # input()은 한 줄을 통째로 읽고 줄 바꿈은 떼어 준다msg = input()print(f"#{n} [{name}] {msg}")
JavaScriptmain.js · 6 行
// 입력을 한꺼번에 읽어 줄 바꿈으로 나누면 줄마다 빈칸이 그대로 남는다const lines = require("fs").readFileSync(0, "utf8").split("\n");const n = Number(lines[0]);const name = lines[1];const msg = lines[2];console.log(`#${n} [${name}] ${msg}`);
TypeScriptmain.ts · 7 行
import { readFileSync } from "node:fs";// 입력을 한꺼번에 읽어 줄 바꿈으로 나누면 줄마다 빈칸이 그대로 남는다const lines: string[] = readFileSync(0, "utf8").split("\n");const n: number = Number(lines[0]);const name: string = lines[1];const msg: string = lines[2];console.log(`#${n} [${name}] ${msg}`);
JavaMain.java · 13 行
import java.io.BufferedReader;import java.io.InputStreamReader;public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 수도 줄로 읽어서 바꾸면 줄 바꿈이 남지 않는다 int n = Integer.parseInt(br.readLine().trim()); String name = br.readLine(); String msg = br.readLine(); System.out.println("#" + n + " [" + name + "] " + msg); }}
C#Main.cs · 12 行
using System;class Program{ static void Main() { int n = int.Parse(Console.ReadLine()); string name = Console.ReadLine(); // 한 줄을 통째로, 줄 바꿈은 빼고 string msg = Console.ReadLine(); Console.WriteLine($"#{n} [{name}] {msg}"); }}
C++main.cpp · 14 行
#include <iostream>#include <limits>#include <string>int main() { int n; std::cin >> n; // cin >> n은 수만 읽는다. 첫 줄에 남은 줄 바꿈을 버려야 다음 getline이 이름을 읽는다 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::string name, msg; std::getline(std::cin, name); std::getline(std::cin, msg); std::cout << "#" << n << " [" << name << "] " << msg << "\n";}
Cmain.c · 15 行
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(void) { char num[16], name[32], msg[80]; if (!fgets(num, sizeof num, stdin)) return 0; if (!fgets(name, sizeof name, stdin)) return 0; if (!fgets(msg, sizeof msg, stdin)) return 0; /* fgets는 줄 바꿈까지 담아 주므로 직접 지운다 */ name[strcspn(name, "\n")] = '\0'; msg[strcspn(msg, "\n")] = '\0'; printf("#%d [%s] %s\n", atoi(num), name, msg); return 0;}
Craykonmain.cray · 5 行
n = 控制台.读行().转数字();// 줄읽기는 한 줄을 통째로 준다(줄 바꿈은 빼고)name = 控制台.读行();msg = 控制台.读行();控制台.输出("#" + n + " [" + name + "] " + msg);