2つの整数より小さい値を出力

1980 ワード

#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;
}

出力が正常であることを確認できます.
疑問点
クエリ条件が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と加算します.『赤信号』を置いて、正常にドアを通過したかどうかを確認することができます.

i 1は1、i 2は任意の数字(?)中に入ったことを確認できました.

問題は、上記のように、再びwhileゲートに戻った後、ifゲートに再び遭遇した場合、scanfは実行できず、直接中断した方法でwhileゲートから脱出することである.
バッファにはn値があるため、次のscanfを受信できない現象が発生します.

scanfの後、入力バッファを削除するソースを追加することで、この問題を解決できます.