두 개의 정수 중 더 작은 값 출력하기
#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 이후에 입력버퍼를 지워주는 소스를 넣어줌으로써 해당문제를 해결할 수 있었다.
Author And Source
이 문제에 관하여(두 개의 정수 중 더 작은 값 출력하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ehddnjs7852/두-개의-정수-중-더-작은-값-출력하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)