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の後、入力バッファを削除するソースを追加することで、この問題を解決できます.
Reference
この問題について(2つの整数より小さい値を出力), 我々は、より多くの情報をここで見つけました https://velog.io/@ehddnjs7852/두-개의-정수-중-더-작은-값-출력하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol