본문 바로가기
C,C++

C언어 기초 4 입력

by 안태규 2023. 8. 9.

저번 글에서는 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