포맷 스트링(format string)이란 일반적으로 사용자로부터 입력을 받아들이거나 결과를 출력하기 위하여 사용하는 형식이다.
%n은 이전까지 입력되었던 문자열의 길이(byte) 수 만큼 해당 변수에 저장시키기 때문에 메모리의 내용도 변조 가능하다. 이를 이용해 문자열의 길이를 내가 변조시키고 싶은 값의 길이만큼 만든 후 %n을 써주게 되면 메모리상에 내가 원하는 값을 넣을 수 있게 된다.
백슬래시() 뒤에 한 문자나 숫자 조합이 오는 문자 조합을 이스케이프 시퀀스 라고 한다.
이스케이프 시퀀스는 단일 문자로 간주되므로 문자 상수로 유효하다.
프로그래머가 원하는 사항을 컴파일러에 직접 지시하는 문법을 전처리기(Preprocessor)라고 한다.
전처리기 문법은 # 기호로 시작하며 기계어로 번역되는 명령문이 아니기 때문에 문법 끝에 ;을 사용하지 않는다.
#include 전처리기는 컴파일러에 자신이 명시한 파일을 읽도록 지시한다.
대부분 헤더 파일(*.h)을 읽을 때 사용한다.
#include <헤더 파일 이름> | 비주얼 스튜디오에서 제공하는 헤더 파일을 포함할 때 |
---|---|
#include "헤더 파일 이름" | 프로그래머가 정의해 사용하는 헤더 파일을 포함할 때 |
#define 전처리기는 상수나 명령문을 치환하는 문법이다.
#define 문법으로 상수 치환하기
#define MAX_COUNT 3
위와 같은 예시에서 #define 문법을 적용하면 컴파일러는 소스 파일에서 MAX_COUNT라는 단어가 나올 때마다 모두 3으로 바꾸어서 번역한다.
putchar(65); /* 아스키 값 65에 해당하는 A가 출력됨 */
putchar('A'); /* 문자 A가 출력됨 */
putchar 함수가 성공적으로 문자를 출력하면 출력된 문자의 아스키 값을 반환하고, 오류가 발생해 출력에 실패하면 EOF(End Of File, -1) 값을 반환한다.
1바이트를 기준으로 출력하기 때문에 한 글자에 2바이트인 한글은 출력할 수 없다.
puts("Hi~");
int data = 5;
printf("%d", data);
int data = 7;
printf("[%5d] [%05d] [%-5d]", data, data, data);
/* %5d는 오른쪽 정렬, %05d는 공백 문자 대신 0으로 채우고 오른쪽 정렬, %-5d는 왼쪽 정렬이다. */
https://haruhiism.tistory.com/8
getchar
함수는 하나의 문자를 입력 받는 함수
gets
함수는 문자열을 입력받는 함수
scanf
함수는 다양한 키워드를 사용하여 문자, 문자열 뿐만 아니라 정수, 실수까지 모두 입력 받을 수 있도록 형식화된 입력 제공
#include <stdio.h>
void main()
{
int int_data;
float float_data;
scanf("%d", &int_data);
scanf("%f", &float_data);
printf("input : %d, %f\n", int_data, float_data);
}
5 [enter 입력]
3.14 [enter 입력]
input : 5, 3.140000
- 입력받은 값 출력하기
- 숫자 1개를 입력받는다.
- 해당 숫자를 출력한다.
//볼드가 사용자 입력값입니다.
ex)
숫자를 입력해주세요. : 3
입력받은 숫자 : 3
#include <stdio.h>
int main(){
int hw1;
printf("input number : ");
scanf("%d", &hw1);
printf("check number : %d", hw1);
return 0;
}
- 입력받은 값의 연산 출력하기
- 숫자 2개를 입력받는다.
- 숫자 2개의 합, 차, 곱, 몫을 출력한다.
//볼드가 사용자 입력값입니다.
ex)
숫자 두개를 입력해주세요. : 3 10
입력받은 숫자 : 3 10
3 + 10 = 13
3 - 10 = -7
3 * 10 = 30
3 / 10 = 0.3
#include <stdio.h>
int main(){
int num1,num2;
printf("num1, num2 : ");
scanf("%d %d", &num1, &num2);
printf("num1 : %d, num2 : %d\n", num1, num2);
printf("%d + %d = %d\n", num1, num2, num1+num2);
printf("%d - %d = %d\n", num1, num2, num1-num2);
printf("%d * %d = %d\n", num1, num2, num1*num2);
printf("%d / %d = %d\n", num1, num2, num1/num2);
return 0;
}