2. C++ 입출력(ps관점)
2022. 7. 14. 20:05ㆍ코딩테스트/C++&자료구조기본
기본 입력
- 문제를 풀다보면 파일 자체로 입력받는 문제들도 있지만, 백준을 기준으로 볼때 대부분의 문제들은 데이터를 입력받아서 서, 데이터를 가공한후, 데이터를 출력해야합니다. 입력을 하는 경우 `scanf`와 `cin`을 사용하는데, 두가지의 장점이 다르니 한번 알아봅시다.
scanf
- 장점 : 특정상황과 특정 변수를 지정해서 받을수 있음.
- 단점 : 받은 데이터의 자료형이 고정됨.
특정변수
코드 | 변수 |
---|---|
%d | int(정수형) |
%c | char(문자형) |
%s | string (문자열) |
%lf | double (실수형) |
%ld | long long (정수형 |
특정상황
ex) x.xx 와 같은 소수점을 포함한 실수에서 정수부분과 소수부분을 나눠서 받고싶은 경우
#include<iostream>
using namespace std;
int a, b;
int main(){
scanf("%d.%d", &a,&b);
printf("정수부분 : %d ", a);
printf("소수부분 : %d" , b);
return 0;
}
cin
- 보편적으로 많이 쓰는 방법
- 개행문자를 기준으로 받음 ( 띄어쓰기, 줄바꿈 )
#include<iostream> using namespace std; string a; int main(){ cin >> a; cout << a << endl; return 0 ; }
기본출력
출력은 기본적으로 cout
과 printf
를 사용한다.
cout
은 cin
과 같이 사용하면 되고 printf
와 같은 경우는 특수한 상황에서도 쓰인다.
문자를 아스키 코드로 변환해서 출력
#include<iostream>
using namespace std;
int main(){
char a;
scanf("%c", &a);
printf("%d", a);
return 0;
}
위의 변수 a 는 문자의 자료형을 가지고 있지만 printf
에서 정수형의 출력을 하므로, 문자 a의 아스키 코드가 출력된다
붙어서 입력받는 경우
우리는 문제를 풀다보면 입력이 붙어 있는 경우가 있습니다.
4 4
1010
1111
0000
1111
와 같은 입력을 하나씩 저장하거나 사용해야 하는 경우가 있습니다.
string으로 변환
#include<iostream>
using namespace std;
int a[50][50];
int n, m;
string s;
int main(){
cin >> n >> m;
for( int i = 0; i < n; i++;){
cin >> s;
for(int j = 0; j< m; j++){
a[i][j] = s[j];
}
}
return 0;
}
와 같이 a에 저장하는 방법이 있습니다.
scanf 사용
#include<iostream>
using namespace std;
int a[50][50];
int n, m;
int main(){
cin >> n >> m;
for( int i = 0; i < n; i++;){
for(int j = 0; j< m; j++){
scanf("%1d", &a[i][j]);
}
}
return 0;
}
이렇게 d 앞에 붙은 1은 한자리의 int만 받겠다는 뜻이 될수 있습니다.
getline
cin
은 개행문자 (띄어쓰기)도 구분해서 받습니다. 그렇다면 "안녕하세요. 이곳은 N0.1 코딩이야기 입니다." 와 같은 한문장 전체를 받고싶다면 어떻게 해야 할까요?
#include<iostream>
using namespace std;
string s;
int main(){
getline(s, cin);
return 0;
}
정답코드를 보는 것 처럼 getline
을 사용하면 받을수 있습니다.
입력이 계속 주어지는 경우
문제를 풀다보면 보통의 문제들은 입력이 quit 이나 -1을 입력 받으면 그만 받도록 설정되어있거나, 몇개의 입력을 받을지 처음에 받고 그 수만큼 입력을 받는 경우가 대다수 입니다.
하지만 입력을 주다가 안줄때 끝난다고 명시되어 있다면 아래의 코드 두개중 하나를 사용해서 문제를 풀어 나가시면 됩니다while(scanf("%d ", &n) != EOF)
while ( cin >> n)
'코딩테스트 > C++&자료구조기본' 카테고리의 다른 글
4. 연산자 (0) | 2022.07.28 |
---|---|
3. 문자열 (0) | 2022.07.26 |
1. C++의 기본 예제와 자료형 (0) | 2022.07.08 |