C++ | 입력과 출력

heige·2023년 12월 25일
0

CPP

목록 보기
2/12
post-thumbnail

입력과 출력

입력

대표적으로 cinscanf가 있다. cin은 개행문자 직전까지 입력을 받고 scanf는 형식을 지정해서 입력을 받는다.

#include <bits/stdc++.h>
using namespace std; 
int a;
int main(){
	cin >> a; 
    scanf("%d", &a); 
	return 0;
}

cin

문제에서 형식을 기반으로 입력이 주어지지 않은 경우scanf보다는 cin을 쓰는 것이 좋다. cin은 개행문자(띄어쓰기, 엔터)직전 까지 입력을 받는다.

#include <bits/stdc++.h>
using namespace std; 
string a;
int main(){
	cin >> a;
	cout << a << "\n"; 
    return 0;
}
/*
입력 :
코딩 화이팅

출력 :
코딩
*/

개행문자를 넣어서 2개의 문자열을 입력하면 다음 코드처럼 모든 문자열이 올바르게 입력 받아진다.

#include <bits/stdc++.h>
using namespace std; 
string a, b;
int main(){
	cin >> a >> b; 
    cout << a << "\n"; 
    cout << b << "\n"; 
    return 0;
}
/*
입력 :
주홍철 바보

출력 :
주홍철 
바보 
*/

scanf

scanf는 첫 번째 매개변수로 받는 형식을 지정해서 입력 받는다.

int scanf ( const char * format, ... );
#include <bits/stdc++.h>
using namespace std; 
int a;
double b;
char c;
int main(){
	scanf("%d %lf %c", &a, &b, &c); 
    printf("%d\n", a); 
    printf("%lf\n", b); 
    printf("%c\n", c);
	return 0;
}
/*
입력 :
23330
233.23123
a

출력 :
23330
233.231230
a
*/

scanf는 주로 입력 형식이 까다롭거나 이를 이용해야 할 때 사용하는 게 좋고, 보통은 cin을 쓰는 게 좋다.

scanf를 활용해 실수타입을 정수타입으로 받아보기

double타입으로 들어오는 것을 double타입으로 받을 수 있지만 scanf를 이용해서 int타입 2개로 받을 수 있다.

#include <bits/stdc++.h>
using namespace std; 
int a, b;
double c;
int main(){
     scanf("%d.%d", &a, &b);
     printf("\n%d %d\n", a, b);
	
    scanf("%lf", &c); 
    printf("%lf\n", c); 
    return 0;
}
/*
입력 :
3.22 
3.22

출력 :
3 22
3.220000
*/

실수 타입의 연산은 굉장히 까다롭기 때문에 이런 트릭을 써서 정수타입 기반의 연산을 유도하기도 한다.

getline

cin은 개행문자 직전까지 입력을 받는데, 한꺼번에 받으려면 getline으로 받으면 된다.

#include<bits/stdc++.h>
using namespace std;
string s;
int main(){
	getline(cin, s);
    cout << s << '\n';
    return 0;
}
/*
김혜주 화이팅 
김혜주 화이팅 
*/

하지만 cin으로 T개의 getline을 받을지를 설정하고 T개 만큼 getline의 입력이 들어오는 상황이 있다. 그럴 때는 특정 문자열을 기반으로 버퍼플래시를 하고 받아야 한다. 이 이유는 cin으로 입력을 받을 때 개행문자 직전 까지 입력을 받게 되고, 이 때문에 중간에 위치한 버퍼에 \n이 남아있게 된다.
이 버퍼의 개행문자를 없애주기 위해 getline(cin, bufferflush)를 해주어야 한다.

c.f 개행문자 : 한 칸 띄어쓰기, 한 줄 띄어쓰기를 의미

#include <bits/stdc++.h>
using namespace std; 
int T;
string s;
int main(){
	cin >> T;
    string bufferflush;
    getline(cin, bufferflush); // 개행문자 제거
    for(int i = 0; i < T; i++){ 
    	getline(cin, s);
		cout << s << "\n";
     }
     return 0;
}

출력

coutprintf가 있다.

cout

cout << 출력할 것 <<"\n"해서 하는게 일반적이다. 저렇게 “한줄” 띄어쓰기를 넣어도 되고 “한칸” 띄어쓰기를 원한다면 cout << "출력할 것" << " "; 이렇게 넣어도 된다. << 이어서 입력할 문자열이나 문자를 넣어도 된다.

#include<bits/stdc++.h>
using namespace std;
string a = "기메주 화이팅! "; 
string b = "노래 너무 좋다..."; 
int main(){
	cout << a << '\n';
	cout << a << " " << "" << b << '\n'; 
    return 0;
}
/*
기메주 화이팅! 
기메주 화이팅! 노래 너무 좋다...
*/

cout의 실수 타입 출력

cout은 기본적으로 실수를 출력하면 일부분만 출력이 된다. cout를 사용해 실수 타입을 출력하고자 한다면?
예를 들어 문제에서 소수자리 6자리까지 반올림해서 출력해야 한다고 해보자. 다음 코드 처럼 cout.precision(자릿수 + 1); 를 걸어 정해주면 된다.

#include<bits/stdc++.h>
using namespace std;
typedef long long ll; 
double a = 1.23456789; 
int main(){
	cout << a << "\n"; // 1.23457 
    cout.precision(7);
	cout << a << "\n"; // 1.234568 
    return 0;
}

printf

printf는 형식을 지정해서 출력할 때 좋다. 다음 코드처럼 형식(format)을 정한 후 다음 매개변수로 변수를 넣으면 형식에 맞춰 출력된다printf는 형식을 지정해서 출력할 때 좋다. 다음 코드처럼 형식(format)을 정한 후 다음 매개변수로 변수를 넣으면 형식에 맞춰 출력된다`.

int printf ( const char * format, ... );
#include<bits/stdc++.h>
using namespace std; 
int a = 1, b = 2; 
int main(){
	printf("홍철 %d : 지수 %d\n", a, b);
	return 0; 
}
/*
홍철 1 : 지수 2 */

printf의 출력형식을 이용해 소수점 6자리까지 그리고 2를 02, 또는 12는 12 이런식으로 출력하려면?

#include<bits/stdc++.h>
using namespace std; 
typedef long long ll; 
double a = 1.23456789; 
int b = 12;
int c = 2; 
int main(){
	printf("%.6lf\n", a); 
    printf("%02d\n", b); 
    printf("%02d\n", c); 
    return 0;
}
/* 1.234568 
12
02
*/

다음은 형식 지정해서 출력하는 모습이다.

#include <bits/stdc++.h>
using namespace std; 
int a = 1;
char s = 'a';
string str = "안녕"; 
double b = 1.223123;
int main(){
	printf("안녕 : %d\n",a); 
    printf("안녕 : %c\n",s); 
    printf("안녕 : %s\n",str.c_str()); // 주의
    printf("안녕 : %lf\n",b);
	return 0;
}
/*
안녕 : 1
안녕 : a
안녕 : 안녕
안녕 : 1.223123
*/

위의 코드를 보면 string str을 출력할 때는 c_str() 함수를 걸어서 출력하고 있다. 문자열을 printf로 출력할 때 주의할 점!
printf 를 기반으로 문자열을 출력하려면 string을 문자열에 대한 포인터(char *) 타입으로 바꿔주어야 하기 때문이다.(그래서 보통 문자열을 출력할 때는 간단히 cout을 사용하는 것이 좋습니다.)

profile
웹 백엔드와 클라우드 정복을 위해 탄탄한 기반을 쌓아가고 있는 예비개발자입니다. 'IT You Up'은 'Eat You Up'이라는 표현에서 비롯되어, IT 지식을 끝까지 먹어치운다는 담고 있습니다.

0개의 댓글