2016-02-13 2 views
-5

В с, что делает это сделать после того, как получаетC чтение входных данных в то время как петля

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

Я видел, что многие из вас говорят мне свое время цикла и все, почему так много усложнение к нему? Почему мы не можем использовать этот код, который я привел ниже?

gets(name); 
if(name == '\n'|| name == EOF) 
    gets(name);` 
+4

Вы имеете в виду, что когда адрес строки 'name' является новой строкой или EOF, мы должны снова прочитать строку? – xinaiz

+0

Понимаете, что означает '==' в 'C'? – fanton

+0

Оригинальная программа просто ждет, пока не будет достигнут конец файла или пока не появится новая строка, а затем продолжит выполнение. – Xaver

ответ

0

Ну, этот кусок кода

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

используется для очистки буфера, как указано в ответе @ napnac в. В основном используется вместо fflush (stdin);, что является UB. Но учтите, что это успешно, только если входной буфер содержит данные, заканчивающиеся в новой строке.

В противном случае вы можете использовать fflush (stdin);, что не рекомендуется. Вы также можете использовать функцию flushinp, предоставляемую библиотекой curses. Он выбрасывает любой тип, который был введен пользователем и еще не был прочитан программой.

+0

спасибо, теперь я понял. – Savn

+0

ОК .. но это обойдется вам в 5 рупий. :) – Savn

1

Прежде, функция gets не очень безопасно, и вы можете использовать вместо fgets.

В любом случае, ваш фрагмент кода используется для очистить буфер. Когда вы будете читать с пользовательского ввода, все вещи, которые будет вводиться пользователем, будут храниться в buffer, а затем программа будет читать из него. Поэтому иногда вам нужно очистить буфер, чтобы вы не читали другие вещи, которые вам не нужны.

Смежные вопросы