2012-03-28 3 views
2

입력 코드가 모음인지, 코드가 작동하지 않는지 간단한 프로그램을 작성했습니다. % 입력 할 때까지 프로그램이 하나씩 입력 문자를 가져와야합니다. 입력 된 문자가 모음인지 확인한 다음 결과를 인쇄합니다. 또한 입력이 문자가 아닌 경우 오류를보고합니다. 문제는 두 번째 단계에서 루프가 끊어지는 것입니다. 도움을 주셔서 감사합니다. PS 죄송합니다. 오류 메시지가 없다는 메시지를 작성하지 않았으며 루프에서 빠져 나옵니다.C while 루프 코드가 작동하지 않습니다.

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 
int main(void) 
{ 
    char processed='q'; 
    while(processed != '%') 
    { 
    printf("Enter letter to check if it's a vowel, %% to quit.\n"); 
    char input = getchar(); 
    processed = tolower(input); 
    printf("%c\n", processed); 
    if (processed == '%') 
     break; 
    if (processed < 'a' || processed > 'z') 
    { 
     fprintf(stderr, "Input should be a letter\n"); 
     exit(1); 
    } 
    switch(processed) 
    { 
     case 'a': 
     case 'e': 
     case 'i': 
     case 'o': 
     case 'u': 
     case 'y': 
     printf ("Vowel\n"); 
     break; 
     default: 
     printf ("Non-vowel\n"); 
    } 
    } 
    exit(0); 
} 
+0

무엇이 오류입니까? – Oleksi

+3

"오류 메시지와 함께"를 입력하면 다음에 입력해야하는 것은 ** 정확한 ** 오류 메시지입니다. 우리는 당신의 스크린을 보거나 여기에서 당신의 마음을 읽을 수 없으며, 당신은 이미 그 오류를 알고 있기 때문에 그것을 제공하는 것이 유리할 수 있습니다. 그렇게하면 모든 정보를 제공하여 문제를 해결하는 것이 훨씬 쉬워지고 더 쉽게 답변을 얻을 수 있습니다. –

답변

5

아마도 문자를 입력하고 [ENTER]를 누르면됩니다. 따라서 실제로는 입력 한 글자와 줄 바꿈 (\n)의 두 가지 문자를 입력하게됩니다. 루프를 통해 두 번째로 줄 바꿈을 받고 문자가 아니라는 것을 알기 때문에 오류가 발생합니다. 아마 당신은 같은 것을 추가 할 : 다른

if (processed == '\n') { 
    continue; 
} 
+0

getchar()은 줄 바꿈이 반환 될 때까지 기다리지 않으므로 입력 할 이유가 무엇입니까? – lnafziger

+0

getchar()는 fgetc (stdin)과 동일합니다. 그러므로 [some-char] + [enter]를 치면 두 번째 반복에서 stdin 다음에 읽으십시오 ... http://pubs.opengroup.org/onlinepubs/007904875/functions/fgetc.html – Naytzyrhc

+0

@Inafziger : 표준 입력이 라인 버퍼 인 경우, 이것은 터미널에 연결되어있는 경우에 기본값이되는 경우가 많으며,'getchar()'는 개행을 기다리는 것처럼 보입니다. – caf

3

누군가가 당신이 입력의 각 문자 후 입력 타격, 따라서 프로그램에 개행 문자 ('\ n')를 보내는 것을 언급했다. 프로그램이이를 처리 할 수있는 케이스가 없으므로 제대로 작동하지 않습니다.

개행을 처리하는 코드를 추가 할 수 있지만 scanf를 사용하면 더 쉬울 것입니다. 특히, 경우) (당신은

.

char indent; 
scanf("%c\n", &indent); 

는 scanf() 줄 바꿈을 처리하고 당신이 관심있는 편지를 다시 반환과

char indent = getchar(); 

교체 그리고 당신은 scanf와 확인해야 물론 오류에 대한 반환 값.

관련 문제