2015-04-22 2 views
1

Я использую while (getchar()! = '\ N'), чтобы удалить мой stdin, но иногда, если я хочу продолжить, мне нужно нажать клавишу Enter, чтобы вычисления продолжались ... Почему? Я отправлю часть своего кода:Использование while (getchar()! = ' N') Я опорожняю stdin, но мне нужно нажать клавишу Enter

while(1){ 
    if(fgets(buffer,MAX_DIMENSION,stdin)==NULL){ perror("Error"); exit(1);} 
    }else{ 
     printf("Not correct term\n"); 
     while(getchar()!='\n'); 
     sleep(1); 
    } 
} 

спасибо!

@iharob если я установить MAX_DIMENSION = 1240 и посылаю в качестве входных данных: строка> 1024 она остается что-то от стандартного ввода, так что я должен использовать во время

+0

Почему так много людей произвольно используют 'while (1)'? ... И вам не нужно ничего пустить с помощью 'fgets()'. –

ответ

0

2 вопроса:

1: Код имеет дополнительный }.

//                 here 
if(fgets(buffer,MAX_DIMENSION,stdin)==NULL){ perror("Error"); exit(1);} 
}else{ 
// or at the beginning 

2: При условии, что над ним не проблема, то, как @unxnut ответил, как правило, fgets() содержит '\n' и нет никакой необходимости пустойstdin.

Однако, когда линия слишком длинная, а '\n' не читается fgets(), тогда имеет смысл читать, пока не будет найден конец.

if (fgets(buffer, MAX_DIMENSION, stdin) == NULL) { 
    perror("Error"); 
    exit(1); 
    } 
    if (strchr(buffer, '\n') == NULL) { 
    int ch; 
    printf("Not correct term\n"); 
    while (((ch = getchar()) != '\n') && (ch != EOF)) 
     ; 
    // while(getchar()!='\n'); 
    sleep(1); 
    } 
+0

Я попробую это решение, спасибо за помощь! – anto150192

0

The (GetChar() = '\ п'!) fgets() функция, захватывает '\n' от stdin, вы используете getchar() для извлечения '\n' из stdin, но это было уже потребляются fgets(), поэтому вам нужен один дополнительный \'n'.

А также, вы не проверяете, возвращается ли getchar()EOF вместо персонажа. И на мой взгляд, while (1) петли, сделать это трудно следовать логике

char buffer[MAX_DIMENSIONS]; 
while (fgets(buffer, sizeof(buffer), stdin) == NULL) 
{ 
    printf("Not correct term\n"); 
    sleep(1); 
} 

будет лучше.

+0

, если я установил MAX_DIMENSION = 1240, и я отправляю в качестве входных данных: строка> 1024, остальная часть на stdin остается в качестве следующего ввода, поэтому я должен использовать while (getchar()! = '\ N') – anto150192

+0

It не будет работать, тогда вы должны использовать 'while (getchar()! = EOF)', но он также блокирует, что вы пытаетесь сделать? –

2

Вы использовали fgets, чтобы получить строку. Эта строка была прервана символами новой строки. Затем вы пытаетесь сделать пустымstdin с помощью getchar и получить что-то в getchar, вы должны ввести другой символ новой строки. Вы можете просто игнорировать буфер после fgets, если это то, что вы хотели. Для освобождения буфера нет необходимости использовать getchar.