기초 · 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 | 한 줄은 콘솔.줄읽기(), 수로는 .수로변환().한 줄의 여러 수는 콘솔.수들읽기()(수 목록으로 줘요).끝까지는 콘솔.줄읽기()가 빈값을 줄 때까지 |
자주 하는 실수
빈 줄을 수로 바꿨어요JavaScript · TypeScript
Number("")→ 오류 없이 0이 돼서, 빈 줄을 읽은 실수가 숨어요
입력 끝의 줄바꿈 때문에 마지막에 빈 문자열이 하나 더 생겨요..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예요.