저번 글에서는 printf에 대해 정리했다
다만 부족한 부분이 있어 추가 하겠다
printf 는 print + format의 약자이며 format이 %d %f %c이런 형식을 가르킨다
따라서 print 출력한다 + format 이러한 형식을 정도로 해석하면 될 것 같다
이를 설명한 이유는 scanf 입력하는 것 또한 scan + format이기 때문이다
눈치를 챘겠지만 이번 문법 또한 scanf("%d",주소값); 이다
다만 여기서 주소값은 생소할 것인데
변수 명 | 주소 | 값 |
num | 0101 | -858993460 |
int num;
num을 선언만 했을 때의 이야기이다
값에는 쓰래기값이 들어가며(아무 의미없는 값) 주소는 랜덤이지만 어떠한 방식은 규칙에 따라 정해진다
지금까지 num = 7 이런식으로 초기화를 해왔지만
scanf에서는 주소값을 필요로 한다
해당 함수는 주소를 입력받고 해당 값으로 이동한뒤 그것을 입력받기 때문이다.
단순히 주소값을 받아오기 위해서는 변수 명 앞에 &를 붙히면 된다
단, 문자열은 변수명 자체가 주소를 이야기한다
int main() {
char InputChar;
int num;
float real;
printf("실수 입력 : ");
scanf("%f", &real);
printf("\n문자 입력 : ");
scanf_s(" %c", &InputChar,1);
printf("\n정수 입력 : ");
scanf("%d", &num);
printf(" %f\t% c\t,%d", real,InputChar,num );
}
예시이다 다만 이것을 visual studio에서 그대로 따라하면 오류가 뜰 것이다
버퍼 오버플로우 때문인데 이를 방지하기위에 선행처리기에 #pragma warning (disable:4996)을 쓰면 된다
또는 scanf_s로 바꾸어 쓰면 된다
scanf_s는 문자를 받을 때 scanf_s("%c",&CharName,buffer크기)이다.
위 보기 참조.
또한 위의 문자 입력부분을 보면 한칸 띄우고 %c가 있는 것을 볼 수 있다
이는 우리가 실수 입력을 할 때 예를 들어 4.5를 치고 엔터를 친다
엔터가 컴퓨터에게는 \n 즉 이 또한 문자로 보기에 오류가 날 수있어
해당 문제 해결을 위해 한칸 띄운 뒤 format부분을 썼다
이가 귀찮다면 getchar()를 쓰기를 바란다
'C,C++' 카테고리의 다른 글
C 언어 기초 3 데이터 출력 (0) | 2023.08.07 |
---|---|
C언어 기초 2(데이터 형식) (0) | 2023.08.07 |
C 언어 기초 1 (0) | 2023.08.07 |