두 개의 정수 중 더 작은 값 출력하기

신동원·2021년 9월 23일
0

C

목록 보기
8/10
#include<stdio.h>

int int_min(int i, int j);

int main()
{

int i1, i2;

while (1)
{
	printf("Input two integers : ");

	//정수를 정상적으로 두개를 받아왔으면 2개의 데이터를 받아온 것으로 인식하는데 
	//정수가아닌 값이나 문자를 받아 올 경우 데이터가 1개만 들어오므로 프로그램이 종료된다.
	if (scanf("%d %d", &i1, &i2) != 2) break;

	int lesser = int_min(i1, i2);

	printf("The lesser of %d and %d is %d\n", i1, i2, lesser);
}

return 0;
}

//자료형 int의 경우는 생략가능하다.
//int_min(int i, int j) 
//더 작은 수를 리턴해주는 함수
int int_min(int i, int j) 
{
//지역변수 이 함수 안에서만 변수를 사용할 수 있다.
int min;

// (i < j) ? i : j; 3항연산자 한줄로 소스를 줄일 수도 있다.
if (i < j)
	min = i;
else
	min = j;


return min;
}


출력이 정상적으로 나오는 것을 확인할 수 있다.


의문점
if문의 조건을 1로 변경하고 입력값을 정수형과 Char형으로 각각 입력했을 때에도 정상적으로 소스가 동작하는가.

printf("Input two integers : ");

//정수를 정상적으로 두개를 받아왔으면 2개의 데이터를 받아온 것으로 인식하는데 
//정수가아닌 값이나 문자를 받아 올 경우 데이터가 1개만 들어오므로 프로그램이 종료된다.
if (scanf("%d %d", &i1, &i2) != 1) break;

int lesser = int_min(i1, i2);

printf("The lesser of %d and %d is %d\n", i1, i2, lesser);

위 소스에 scanf로 정상적으로 입력을 받아왔는지 확인하는 if문에 강제로 1개의 데이터를 받아온다고 소스를 변경하여 보았다.
입력값에 1과 .을 넣었고 if문을 정상적으로 지나쳐 간다는 것을 확인할 수 있었다.

i1에는 1이, i2에는 임의의 난수(?)가 들어가는 것을 확인 할 수 있었다.

문제는 위와 같이 다시 while문으로 돌아간 후 다시 if문을 만났을 때 scanf가 실행되지 못하고 그대로 break로 while문을 탈출하는 현상이 발생하였다.

버퍼에 \n값이 남아있어 다음 scanf를 받아오지 못하는 현상이 일어났다.

scanf 이후에 입력버퍼를 지워주는 소스를 넣어줌으로써 해당문제를 해결할 수 있었다.

profile
오늘보다 내일 더 나은 사람이 되기 위해 노력하자

0개의 댓글