2011-10-30 24 views
1

Я хотел бы написать программу, которая продолжает запрашивать ввод пользователя, пока я не вырвусь из него с помощью ctrl + D. Вот что у меня есть:Loop Для ввода пользователем

char input[100]; 
while(input != EOF){ 
     printf("Give me a sentence:\n"); 
     fgets(input, 5, stdin); 
     printf("your sentence was: %s\n", input); 
} 

Я хотел бы, fgets, чтобы начать с 5 первых символов нового входа, не нравится 6-го последнего входа всякий раз, когда это петли вокруг, и я не знаю, как написать условие на время, чтобы разбить его через ctrl + D. Прямо сейчас, когда вы видите вход (который является char [], сравнивается с EOF).

Спасибо за любой совет.

ответ

1

Я думаю, что вы ищете функции feof.

char input[100]; 
while(!feof(stdin)){ 
     printf("Give me a sentence:\n"); 
     fgets(input, 5, stdin); 
     printf("your sentence was: %s\n", input); 
} 
+0

ferror также предоставит аналогичную услугу. – Lalaland

+0

Благодарю вас, это работает для ctrl + d. Тем не менее, он не печатает строку, которую я только что напечатал. Кажется, что stdin не был очищен или что-то еще, поэтому он постоянно добавляет распечатки в каждый цикл. – KWJ2104

+0

Он работает на моем компьютере, за исключением того, что он прерывает строки (из-за второго аргумента от 5 до fgets). – Lalaland

0

Вам не нужно беспокоиться о «обнаружении» ctrl-D, так как это оболочка, которую не видит ваша программа. Вы должны рассмотреть вопрос об использовании перенаправления ввода в то время как вы исправить код, прежде чем беспокоиться о Ctrl-D вещи

./myExecutable < inputFile 
+0

Но мой цикл не останавливается после того, как я Ctrl-D – KWJ2104

+0

@ Matt Ctrl-D должно вызвать вашу программу, чтобы увидеть EOF. Если вы получите право на обнаружение EOF, у вас будет то, что вы хотите. – JustJeff

+0

@JustJeff Я знаю, поэтому я пытаюсь спросить, как я обнаруживаю EOF. – KWJ2104

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