2014-10-04 2 views
-3
while((c= getchar()) != '\n' && c != EOF); 

У меня возникла проблема с использованием gets() для ввода строк. Я нашел в google, что он сохранил значение «\ n» во входном буфере. Я искал здесь и нашел приведенный выше код для решения моей проблемы. Однако я не совсем понимаю это. Что это делает? Кто-нибудь, пожалуйста, просветите меня.Что это делает: while ((c = getchar())! = ' N' && c! = EOF);

+2

Нет, вам нужно изучить C++ самостоятельно, а затем задать вопрос здесь –

+0

Я изменил тег 'C++' на тег 'C' как чистый' C', а не 'C++'. – Benio

+5

@Benio не делаем. Пока это действительный код C++, не имеет значения, что он также действителен. И иногда разница имеет значение. –

ответ

2

Код вводит while -loop. Его условие выхода присваивает целому числу c значение, возвращаемое getchar(), и проверяет, равно ли оно символу новой строки ('\n') или EOF. Если это так, цикл выходит. Если это не так, следующий символ извлекается и так далее.

Код в основном пропускает все символы до следующей новой строки или EOF. Это эквивалентно:

for (;;) 
{ 
    c = getchar(); // c has been declared elsewhere 
    if (c == '\n' || c == EOF) 
     break; 
} 
+0

Да! Это намного легче понять, чем то, что было сжато в одну строку. +1 – Adi

+0

@gotolabeladi, вам не хватает репутации для увеличения/+ 1, но вы все равно можете принять его –

3

Уступка в C++ также дает присвоенное значение. Итак, c= getchar() читает следующий символ из файла, а (c= getchar()) != '\n' сравнивает этот символ чтения с символом новой строки. Есть еще один тест для специального значения EOF, чтобы убедиться, что он не пытается читать, как только вы достигнете конца файла.

Нет никакого заявления между while и закрывающей точкой с запятой, потому что ничего другого не нужно делать, вы выбрасываете ввод.

+0

Так что в основном то, что он делает, это то, что после ввода строки она читает строку до тех пор, пока не найдет новый символ строки и EOF, т.е. -1 – Adi

+2

@gotolabeladi Пока не найдет новый символ линии *** или *** EOF. – Boann