2017-10-22 1 views
1

?
[CTRL] + [C]로만 작동하는 경우
그러나 우리의 작업은 [CTRL] + [D]로 scanf()에서 명시 적으로 수행하는 것입니다.
scanf()에서 [CTRL] + [D]를 눌러 EOF를 얻으려면 어떻게해야합니까?</p> <p>어떻게 <code>scanf()</code>에서 [CTRL] + [D]을 눌러 <strong>EOF</strong>을 달성 할 수있다 : (리눅스 민트 18.1 시스템)

내 기능은 다음과 같습니다

float getFloat1() 
{ 
    float num = 0.0; 
    char term; 
    char loop = 'y'; 

    while (loop == 'y') 
    { 
    printf("Please enter a number: "); 
    if (scanf("%f%c", &num, &term) != 2 || term != '\n') 
    { 
     printf("[ERR] Invalid input.\n"); 
     while ((getchar()) != '\n'); // Flushes the scanf() input buffer 
    } 
    else 
    { 
     printf("[OK] Valid input: %f\n", num); 
     loop = 'n'; 
    } 
    } 
    return num; 
} 

내가 어떤 도움, 링크, 참조 및 힌트 감사!

답변

1

변수를 사용하여 scanf 결과를 저장하십시오. 그런 다음 블록의 변수를 비교하여 EOF가 캡처되었는지 확인합니다.

float getFloat1() 
{ 
    float num = 0.0; 
    char term; 
    char loop = 'y'; 
    int result = 0; 

    while (loop == 'y') 
    { 
     printf("Please enter a number: "); 
     if ((result = scanf("%f%c", &num, &term)) != 2 || term != '\n') 
     { 
      if (result == EOF) { 
       printf ("EOF\n"); 
       break; 
      } 
      printf("[ERR] Invalid input.\n"); 
      while ((getchar()) != '\n'); // Flushes the scanf() input buffer 
     } 
     else 
     { 
      printf("[OK] Valid input: %f\n", num); 
      loop = 'n'; 
     } 
    } 
    return num; 
} 
+0

에 통화 EOF 검사에 대해 조금 불분명 감사합니다 나를 위해 잘 작동! [CTRL] + [D]를 눌러 함수를 종료 할뿐만 아니라 전체 프로그램을 종료 할 수있는 방법이 있습니까? – PatrickSteiner

0

이 문 :

while ((getchar()) != '\n'); 

는 EOF를 확인하기 위해 하나 개의 장소가 될 것입니다. 제안 :

int ch; 
while((ch = getchar()) != EOF && '\n' != ch); 

문제는 scanf()

관련 문제