{ }codelper

배우기 › JavaScript

기초 · 03

입력 받기

키보드(표준 입력)에서 문자열과 수를 읽어요.

문제를 풀려면 입력(표준 입력)을 읽어야 해요.
아래 예제는 이름 한 줄과 수 한 줄을 읽어서, 인사를 하고 그 수의 두 배를 찍어요.

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);
stdin
Lara
3
stdout
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+/)가 안전해요
TypeScriptJavaScript와 같아요
JavaScanner의 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)
Cscanf("%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에서 입력 3에 1을 더하면 "3" + 1 → "31"이고, Python input() + 1은 TypeError예요.

연습 문제