문제

Eclipse에서 다음 코드를 실행하려고하지만 콘솔은 출력이 "다음 값을 입력하기 (<= 0에서 종료) 2130567168 분은 35509452 시간 48 분입니다." 반복해서 반복됩니다.

Scanf는 어떤 이유로 든 기본값을 넣고있는 것 같습니다. 이유를 알 수 없습니다. 나는 프로그램이 중지되기 전에 아무것도 보지 못했기 때문에 Printf가 플러시되지 않는 것과 관련이 있다고 생각했지만 n을 사용하여 플러시를 강제로 사용했습니다.

어떤 아이디어?

#include <stdio.h>
const int MIN_PER_HOUR = 60;  // minutes per hour

int main(void)
{
 int hour, min, left;

 printf("Convert minutes to hours and minutes!\n");
 printf("Enter the number of minutes (<=0 to Quit):\n");

 scanf("%d", &min);    // read number of minutes

 while(min > 0){
  hour = min / MIN_PER_HOUR; // truncated number of hours
  left = min % MIN_PER_HOUR; // number of minutes left over

  printf("%d minutes is %d hours, %d minutes.\n", min, hour, left);

  printf("Enter next value (<=0 to quit)");
  scanf("%d", &min);
 }
 printf("Done!\n");

 return 0;
}
도움이 되었습니까?

해결책

Eclipse의 터미널 에뮬레이터는 다를 수 있으며 더 많은 버퍼링을 수행 할 수 있습니다. 전화 해보세요 fflush(stdout); 인쇄물과 호출 사이 scanf().

다른 팁

코드를 Visual C ++로 옮겼으며 예상대로 작동합니다. 내 질문은 "이클립스의 터미널 에뮬레이션이 왜 깨 졌습니까?"

입력에 정수를 나타내는 잘못된 문자가있는 경우 scanf(), 기능은 그 캐릭터에서 멈출 것입니다. 버퍼에 남겨두고 다시 읽을 준비가되었습니다. 그리고 다시, 그리고 다시 ...

첫 번째로 "14 분"을 입력했다고 가정 해 scanf(). 함수는 "14"를 읽고 공간에서 멈 춥니 다. 그런 다음 변수에 14를 할당합니다 min 그리고 프로그램은 계속됩니다.

그런 다음 루프 내부에서 프로그램이 다른 것을 실행합니다. scanf(). 이번에 입력 버퍼에는 이미 공간이있는 "Mins"가 이미 있습니다. scanf() 공간을 읽고 무시하고, 정수로 변환 할 수없는 'm'을 찾아서 변수에 새 값을 할당하지 않고 멈출 것입니다. min 그리고 값을 반환합니다 0. 그리고 다시 ... 그리고 다시 ... 그리고 다시.

그래서 당신이해야 할 일은 매번 입력 버퍼를 지우는 것입니다. scanf().

얼마나 분명합니까?
아마도 Enter까지 - 거의 동일합니다. fgets() 하다 :)
예를 들어:

int ch;
scanf("%d", &min);
do { ch = getchar(); } while (ch != '\n'); /* empty buffer */
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top