
이 문제도 기본 입출력 문제이다 . 마찬가지로 <iostream>, <stdio.h>, <cstdio> 로 풀었다.
<iostream>#include <iostream>
using namespace std;
int main() {
int a;
int b;
cin>>a;
cin>>b;
cout<<a+b<<endl;
return 0;
}
cin으로 라이브러리 버퍼에 저장된 값 읽을때 자료형은 내가 변수를 어떤 타입으로 선언했는지에 따라서 달라진다.
내가 위처럼 int a 로 변수를 선언했으므로 cin>>a 하면 버퍼에 있던 값이 자동으로 int 로 a에 저장된다.
만약 내가 a를 string으로 선언했으면 cin>>a 하면 버퍼에 있던 값이 자동으로 string 으로 a에 저장된다.
<stdio.h>#include <stdio.h>
int main() {
int a;
int b;
scanf("%d", &a);
scanf("%d", &b);
printf("%d", a+b);
return 0;
}
scanf로 라이브러리 버퍼에 저장된 값 읽을때 자료형은 내가 변수를 어떤 타입으로 선언했는지에 따라 정해지고, 수의 진법은 어떤 서식지정자를 사용했냐에따라 달라진다.
EX)
10진수int로 받고싶으면 형식 지정자는%d, 변수 자료형은int로 해야한다.
내가 위처럼 int a 로 변수를 선언했고, 형식 지정자를 %d로 사용했으므로, scanf("%d", &a) 하면 버퍼에 있던 값이 자동으로 int 로 a에 저장된다.
라이브러리 버퍼에 1 2가 있는 경우, 이를 공백 단위로 받기위해서는
scanf("%d %d", &a, &b); // 공백/개행 구분 없이 정수 2개 읽기
이렇게 scanf() 한 줄로 토큰 단위로 읽을 수 있다.
라이브러리 버퍼에 1 2가 있는 경우, 이를 공백 단위로 받기위해서는
int a,b;
scanf("%d", &a); //공백전까지를 변수에 저장
scanf("%d", &b); //공백전까지를 변수에 저장
이렇게 scanf()를 토큰의 개수 만큼 써주는 방법이 있다.
scanf("%d", &a);
이런식으로 주소 연산자를 통해 입력을 저장할 변수의 주소를 넘겨줘야한다
<cstdio>#include <cstdio>
using namespace std;
int main() {
int a,b;
scanf("%d",&a);
scanf("%d",&b);
printf("%d",a+b);
return 0;
}
scanf로 라이브러리 버퍼에 저장된 값 읽을때 자료형은 내가 변수를 어떤 타입으로 선언했는지, 형식 지정자를 무엇으로 썼는지에 따라 정해진다.
EX)
int로 받고싶으면 형식 지정자는%d, 변수 자료형은int로 해야한다.
내가 위처럼 int a 로 변수를 선언했고, 형식 지정자를 %d로 사용했으므로, scanf("%d", &a) 하면 버퍼에 있던 값이 자동으로 int 로 a에 저장된다.

역시 입출력은 <stdio.h>, <cstdio> 가 <iostream> 보다 메모리를 덜 사용한다. (성능이 좋다)

코테에서 입력은 이미 라이브러리 버퍼에 저장되어있는 값으로 생각하자.
어차피 입력 넣으면
[키보드에서 입력] ↓ [운영체제(OS) 입력 버퍼] ← OS가 관리 ↓ (엔터 ↵ 누를 때까지 버퍼에 대기) [C++ 라이브러리 입력 버퍼] ← <iostream\> 라이브러리 내부의 C++ Stream Buffer 의미 ↓ (cin >>, getline 등 호출 시) [프로그램 변수] ← 실제 변수에 저장
위와 같은 식으로 되니까.