C언어의 표준 입출력 함수
printf() 함수와 scanf() 함수는 C언어의 표준 입출력 함수 중에서도 가장 많이 사용되는 입출력 함수이다.
printf()
int main()
{
int a = 5;
printf("printf() 함수는 서식 시정자를 통해 출력할 데이터의 서식을 지정할 수 있다!\n");
printf("변수에 저장된 숫자는 %d입니다!", a);
return 0;
}
/*실행 결과
printf() 함수는 서식 시정자를 통해 출력할 데이터의 서식을 지정할 수 있다!
변수에 저장된 숫자는 5입니다!
*/
printf() 함수는 " " 큰 따옴표 안에 있는 것을 모두 문자열로 출력하는 함수이다.
위의 예제에서는 int형 데이터를 나타내기 위해서 "%d" 라는 서식 지정자를 사용했다.
또한, 줄 바꿈은 "\n"라는 이스케이프 시퀀스를 사용하여 표현하고 있다.
서식 지정자(format specifier)
앞선 예제에서 나온 '%d'와 같은 문자를 서식 지정자라고 한다.
| 서식 지정자 | 출력 데이터 형태 |
| %c | 하나의 문자 |
| %s | 문자열 |
| %d | 부호 있는 10진 정수 |
| %i | 부호 있는 10진 정수 (%d와 동일) |
| %f | 고정 소수점으로 표현한 실수 (소수점 이하 6자리까지 표현) |
| %o | 부호 없는 8진 정수 |
| %u | 부호 없는 10진 정수 |
| %x | 부호 없는 16진 정수 (소문자) |
| %X | 부호 없는 16진 정수 (대문) |
| %e | 부동 소수점으로 표현한 실수 (e - 표기법) |
| %E | 부동 소수점으로 표현한 실수 (E - 표기법) |
| %g | 값에 따라 %f나 %e를 사용한다. |
| %G | 값에 따라 %f나 %E를 사용한다. |
| %% | 퍼센트(%) 특수문자 출력 |
int main()
{
printf("%%c를 사용한 결과 : %c\n", 'a'); // 문자
printf("%%s를 사용한 결과 : %s\n", "안녕하세요!"); // 문자열
printf("\n");
printf("%%f를 사용한 결과 : %f\n", 0.123456);
printf("%%f를 사용한 결과 : %f\n", 0.123456789); // 소수점 6자리까지만 표현 (7번째 숫자는 반올림)
printf("\n");
printf("%%o를 사용한 결과 : %o\n", 123); // 8진 정수
printf("%%x를 사용한 결과 : %x\n", 123); // 16진 정수
printf("\n");
printf("%%g를 사용한 결과 : %g\n", 0.001234); // 값에 따라 %f나 %e
printf("%%g를 사용한 결과 : %g\n", 0.00001234); // 값에 따라 %f나 %e
printf("%%G를 사용한 결과 : %G\n", 0.000001234); // 값에 따라 %f나 %E
return 0;
}
/*실행결과
%c를 사용한 결과 : a
%s를 사용한 결과 : 안녕하세요!
%f를 사용한 결과 : 0.123456
%f를 사용한 결과 : 0.123457
%o를 사용한 결과 : 173
%x를 사용한 결과 : 7b
%g를 사용한 결과 : 0.001234
%g를 사용한 결과 : 1.234e-05
%G를 사용한 결과 : 1.234E-06
*/
이스케이프 시퀀스(escape sequence)
printf() 예제의 '\n'과 같은 문자를 이스케이프 시퀀스라고 한다.
이러한 이스케이프 시퀀스는 프로그램의 결과가 화면에 출력될 때 사용하게 될 특수한 문자를 위해 만들어졌다.
| 이스케이프 시퀀스 | 출력 내용 |
| \' | 작음 따옴표 |
| \" | 큰 따옴표 |
| \? | 물음표 |
| \\ | 백슬래시(\) |
| \a | 경고음 발생 |
| \b | 백스페이스(backspace) |
| \n | 줄 바꿈(new line) |
| \r | 캐리지 리턴(carriage return) |
| \t | 수평 탭(tab) |
특수 문자의 바로 앞에는 언제나 \가 와야, 출력할 수 있다.
scanf()
scanf() 함수는 c언어의 표준 입력 함수로, 사용자로부터 다양한 데이터를 다양한 서식에 맞춰 입력받는다.
이 함수는 입력받은 데이터를 어떤 서식으로 변환할지 서식 지정자를 통해 직접 지정할 수 있다.
int main()
{
int test1, test2;
printf("첫 번째 정수를 입력하세요 : ");
scanf("%d", &test1);
printf("두 번째 정수를 입력하세요 : ");
scanf("%d", &test2);
printf("입력하신 두 정수의 합은 %d입니다.\n", test1 + test2);
return 0;
}
/*실행결과
첫 번째 정수를 입력하세요 : 10
두 번째 정수를 입력하세요 : 20
입력하신 두 정수의 합은 30입니다.
*/
C언어에서 데이터를 입력받으려면 입력받고자 하는 데이터의 타입에 해당하는 크기의 메모리를 우선 할당받아야 한다.
이처럼 데이터를 저장하기 위해 이름을 할당받은 메모리 공간을 변수라고 한다.
앞선 예제에서 scanf() 함수에 포함된 '&'기호는 주소 연산자라고 한다.
이 주소 연산자는 입력받은 데이터를 뒤에 나오는 변수에 저장하라는 의미이다.
※ double형 실수의 입력
scanf() 함수로 float형 실수를 입력받을 때는 서식 지정자로 '%f'를 사용하면 된다.
하지만 double형 실수를 입력받을 때는 '%f'를 사용하면 안 되고, 반드시 '%lf' 서식 지정자를 사용해야 한다.
C++ 표준 입출력 클래스
C++의 모든 것은 객체로 표현되므로, 입출력을 담당하는 수단 또한 모두 객체이다.
C언어의 printf() 함수나 scanf() 함수처럼 C++에서도 iostream 헤더 파일에 표준 입출력 함수를 정의하고 있다.
C++에서는 기본적으로 string 타입의 변수 선언이 가능하고 cout 객체로 출력 작업을, cin 객체로 입력 작업을 수행하고 있다.
또한, C++에서도 기존 C언어의 스타일처럼 printf() 함수나 scanf() 함수를 사용할 수 있다.
std::cout
std::cout 객체는 다양한 데이터를 출력하는 데 사용되는 C++에서 미리 정의된 출력 스트림을 나타내는 객체다.
#include <iostream>
using namespace std;
int main()
{
cout << "안녕하세요!";
return 0;
}
/*실행 결과
안녕하세요!
*/
※ cout 객체에서 사용하는 '<<'와 왼쪽 시프트 연산자 '<<'는 서로 다르다!
시프트 연산자는 맞지만, 내부에서 연산자 오버로딩을 통해 다르게 사용한다.
cin
cin 객체는 다양한 데이터를 입력받는 데 사용되는 C++에서 미리 정의된 입력 스트림을 나타내는 객체다.
cin은 공백이 입력으로 들어오는 순간 문자열의 끝이라고 판단하여 더 이상의 입력을 받지 않게 된다.
ex) Hello World! 를 치게 되면 Hello와 World 사이의 공백때문에 Hello만 입력받게 된다.
#include <iostream>
using namespace std;
int main()
{
int age = 0;
cin >> age;
cout << "나이를 입력 해 주세요 : " << age << endl;
cout << "나이는 age살" << "입니다!" << endl;
return 0;
}
/*실행 결과
나이를 입력 해 주세요 : 15
나이는 15살 입니다!
*/
위의 예제에서 입력한 데이터는 자동으로 정수를 저장할 때 사용되는 타입으로 변환된다.
만약에 문자열을 입력하면 cin 객체는 변수 age에 숫자가 아니라는 의미인 0을 반환한다.
'endl'란 C언어의 '\n'와 같다.
'📕Programming > 📝C/C++' 카테고리의 다른 글
| [C / C++] 배열 (array) (0) | 2023.09.11 |
|---|---|
| [C / C++] 반복문 (0) | 2023.09.10 |
| [C / C++] 조건문 (0) | 2023.09.10 |
| [C / C++] 연산자 (Operator) (0) | 2023.09.05 |
| [C / C++] 기본 자료형 (0) | 2023.09.05 |