2016-06-30 2 views
1

У меня проблемы, я запрашиваю ввод с клавиатуры, используя библиотечную функцию fscanf(), используя поток stdin.Как закончить цикл while с помощью fscanf с потоком stdin

#define STOP '.' 

char str[100];   //string variable 
while((fscanf(stdin,"%s",str)) == 1) { 
      //code 
      //code 
} 

// Я хочу завершить этот цикл, если пользователь нажать кнопку ввода, то, что я уже пробовали это:

1)while((fscanf(stdin,"%s",str)) > 0) 
2)while((fscanf(stdin,"%s",str)) < 0) 
3)while((fscanf(stdin,"%s",str)) == 1 && str[0] != '\n') 

// третий один со всеми комбинации операторов

4)while((fscanf(stdin,"%s",str)) == 1 && str[0] != '\0') 

// Четвёртый раз со всей комбинацией операторов

5)while((fscanf(stdin,"%s",str)) == 1 && str[0] != STOP) 

// 5 также со всеми возможными операторами

Я могу использовать другие функции, я знаю это, но мне это нужно, потому что сначала для обучения, когда я искал, и я ничего и не нашел, используя это в функции, которая принимает поток как параметр, и я изменяю поток в этой функции в соответствии с моей потребностью, потому что я должен использовать эту функцию.

да, если кто-то хочет сказать, сложный, я хочу, чтобы мой в то время как петля работать так же, как это в то время,

while((fgets(str,100,stdin)) != NULL && str[0] != '\n'); 
+1

Что такое 'input' и как он заполняется? – LPs

+1

Почему вы не можете использовать этот цикл 'while' с' fgets'? – GMichael

+0

Ввод - это просто название книги. @LPs –

ответ

0

Если вы используете fscanf(stdin,"%s",str), вы не можете завершить цикл, когда пользователь нажимает клавишу Enter. Это потому, что формат %s читает следующее слово из входного потока. Когда пользователь нажимает Enter, он продолжает считывать из входного потока, пока не найдет слово.

Вы можете использовать fgets, как и другие. Вы можете прочитать входной символ по символу и проанализировать его. Вы можете потребовать от пользователя нажать Ctrl-D (в Unix), а не Enter, потому что Ctrl-D сообщает EOF. Вы можете даже использовать curses. С fscanf(stdin,"%s",str) и Enter проблема неразрешима.

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