#include <iostream>
#include <cstdio>
배열과 문자를 모두 입력받을 수 있다.
이러한 문제를 해결하기 위하여, 문자열을 입력 받을 때 getline() 함수를 사용한다.
char cs[20];
cin.getline(cs, 20);
string s;
getline(cin,s);
중요
cin.clear() - 버퍼 초기화
cin.ignore(무시할 문자의 최대 길이, 무시를 종료할 문자) - 버퍼 안에 있는 내용 무시, 인수 없이 사용 가능
cin.get() - 문자 하나를 입력 받는다.(공백 포함)
scanf는 c언어를 배울 때 처음 배우는 입력 함수이다.
정수 하나를 입력받을 때
int i;
scanf("%d", &i);
scanf에서 우리가 첫 파라미터로 입력한 값을 형식지정자라고 한다. 이 값을 잘 조정함으로 우리는 다양한 입력을 여러가지 방법으로 받을 수 있다.
예를 들어 123456789 라는 입력이 있을 때 이 입력을 9자리의 정수가 아닌 3자리의 정수 3개로 받을 수 있다.
int a, b, c;
scanf("%3d%3d%3d", &a,&b,&c);
// 반복문 형태도 가능
for(int i = 0;i < 3;i++)
scanf("3d",&a);
형식지정자의 형태는 %[*][width][length]specifoer의 꼴이다.
*의 사용
*를 사용하면 입력을 무시할 수 있다.
scanf("%*d %d", &a);
1234 5678이란 입력이 주어진다면 1234는 무시되어 a는 5678이 된다.
무시할 글자의 길이를 지정해주면 공백으로 구분되어 있지 않은 입력도 일부분만 받을 수 있다.
scanf("%*3d%d", &a);
12345을 입력으로 주면 a는 456이 된다.
[]사용
[]내부에 있는 문자만 입력으로 처리한다는 뜻이다. 범위를 지정하는 것도 가능해서 "%[A-Za-z0-9]"와 같이 쓰면 스페이스바, 알파벳 대소문자와 숫자를 처리가능하다.
[^] 사용
[]와 반대이다. []내부에 있지 않은 문자만 입력으로 처리한다. "%[^\n]"과 같이 쓰면 엔터를 입력하기 전 모든 글자(공백 포함)를 입력 받을 수 있다.
scanf("%[^\n]", s);
cout, printf
기본적으로 cin & cout는 scanf & printf 와 비교했을 때 속도가 현저히 느리다. 이 차이로 인해 시간초과가 나는 경우가 있다.
이 때 밑의 코드를 주입하면 cin & cout의 속도를 높일 수 있다.
ios_base :: sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
주의할 점
1. scanf, printf와 섞어 사용하지 말 것
2. 싱글 쓰레드 환경에서만 사용할 것(실무에서 사용하지 말 것)
웬만하면 scanf,printf를 사용하는 쪽으로..
출처 :
https://algwang.tistory.com/10
https://simsimjae.tistory.com/33
https://tempdev.tistory.com/5