
C++ 에는 3가지 입출력 방식이있다.
iostream, stdio.h, cstdio 이다.
<iostream>만약 공백, 탭, 개행 단위로 읽어내고싶으면 std namespace의iostream 헤더에 포함된 cin을 쓰면된다.
C++의 표준 입출력 방식이다.
#include <iostream>
using namespace std;
int main() {
cout<<"Hello World!";
return 0;
}
cin은 입력 버퍼에서 `공백, 탭, 개행 단위로 읽어낸다.
만약 공백, 탭 포함해서 한 줄 단위로 읽어내고싶으면 string 헤더에 포함된 getline(입력 스트림, 문자열 저장할 변수명)을 쓰면된다.
#include <iostream>
#include <string>
using namespace std;
int main() {
string fullName;
cout << "이름을 입력하세요: ";
getline(cin, fullName);
cout << "입력된 이름: " << fullName << endl;
return 0;
}
위와같이 쓸 수 있다.
#include <iostream>
using namespace std;
int main() {
cout<<"Hello World!"<<endl;
return 0;
}
C의 표준 라이브러리로, : C++ 은 기본적으로 C의 표준 라이브러리를 사용할 수 있다.
#include <stdio.h>
int main() {
int a = 10;
float b = 3.14;
char c = 'A';
char str[] = "Hello";
printf("정수: %d\n", a);
printf("실수: %f\n", b);
printf("문자: %c\n", c);
printf("문자열: %s\n", str);
int age;
float height;
printf("나이 입력: ");
scanf("%d", &age); // int는 %d
printf("키 입력: ");
scanf("%f", &height); // float는 %f
printf("당신은 %d살이고 키는 %.2fcm 입니다.\n", age, height);
return 0;
}
printf는 형식 지정자 자리에 a, b, c, str 같은 것들이 들어간다고 생각하면된다.scanf는 입력을 저장할 변수의 주소(&) 를 넘겨줘야 한다.입력 버퍼의 앞에 나오는 연속적인 공백(스페이스, 탭, 개행 등)을 모두 무시
이후 나오는 숫자(부호 포함, 0~9)를 계속 읽음
숫자가 아닌 문자를 만나면 거기서 멈춤 (그 문자는 버퍼에 남음)
즉, 공백 or 개행단위로 데이터를 읽는다. 공백이든 개행이든 다 무시해버린다.
| 서식 지정자 | 자료형 | 예시 |
|---|---|---|
%d | int (10진수 정수) | 10 |
%u | unsigned int | 4294967295 |
%f | float, double (실수) | 3.140000 |
%.2f | 소수점 둘째 자리까지 출력 | 3.14 |
%lf | double (scanf에서 double은 %lf, printf에서는 그냥 %f) | |
%c | char (문자) | 'A' |
%s | 문자열 (char 배열) | "Hello" |
%x | 16진수 정수 | ff |
%o | 8진수 정수 | 17 |
%p | 포인터 주소 | 0x7ffd... |
%d, %f, %c, %s 정도만 알 면 될 듯하다.
#include <stdio.h>
int main(){
printf("%s\n","Hello World!");
return 0;
}
C++에서 <cstdio\>는 C의 <stdio.h\>를 C++식으로 쓸 수 있게 만든 헤더임.
C 스타일 헤더. 함수들이 전역 공간에 선언됨.
printf("Hello"); // 그냥 이렇게 씀
C++ 스타일 헤더. 함수들이 std 네임스페이스 안에 들어감.
std::printf("Hello"); // std:: 붙여야 함`
#include <cstdio> // C++ 헤더
int main() {
int age = 25;
double pi = 3.14159;
std::printf("나이: %d\n", age); // 정수 출력
std::printf("원주율: %.2f\n", pi); // 소수점 2자리까지 출력
int x;
std::printf("정수 입력: ");
std::scanf("%d", &x); // 입력
std::printf("입력한 값은 %d 입니다.\n", x);
return 0;
}
그냥 namespace std에 선언되었다는거 말고는 <stdio.h> 와 사용법이 완전히 동일한 것 같다.
#include <cstdio>
using namespace std;
int main() {
printf("%s","Hello World!");
return 0;
}

밑에서부터 순서대로 <iostream>, <stdio.h>, <cstdio> 이다.
<stdio.h>와 <cstdio>는 메모리를 덜 쓰는반면, <iostream>은 메모리를 많이 쓰는 것을 확인할 수 있다.
운영체제에서 표준 입력(stdin)은 "줄 단위(line buffered)" 모드가 기본임 (터미널/콘솔 환경 기준).
사용자가 키보드로 한 글자 입력할 때마다 OS 내부의 임시 공간(터미널 드라이버 버퍼)에 저장됨
하지만, 프로그램(C의 scanf, getchar, fgets 등)이 그 입력을 "읽을 수 있는 상태"가 되려면 엔터(↵) 를 눌러야 함.
엔터를 치는 순간 → 지금까지 입력된 문자열(123 45\n)이 운영체제의 stdin 버퍼(라이브러리 레벨 버퍼) 로 흘러 들어감.
이후 프로그램의 scanf()가 호출되면, 그 stdin 버퍼에서 데이터를 꺼내 쓰는 것.