如何使用带有stdin流的fscanf来终止while循环

时间:2016-06-30 08:37:16

标签: c arrays string loops

我有点麻烦,我正在使用stdin流使用fscanf()库函数从键盘输入。

#define STOP '.'

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

//如果用户按Enter键我想终止此循环,我已经尝试过的事情是:

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循环能够完全像这样工作,

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

1 个答案:

答案 0 :(得分:0)

如果使用fscanf(stdin,"%s",str),则在用户按Enter键时无法终止循环。这是因为%s格式从输入流中读取下一个单词。当用户点击Enter时,它会继续从输入流中读取,直到找到一个单词。

您可以像其他人建议的那样使用fgets。您可以逐个字符地读取输入字符并进行解析。您可能需要用户按Ctrl-D(在Unix中)而不是Enter,因为Ctrl-D报告EOF。您甚至可以使用curses。使用fscanf(stdin,"%s",str)和Enter,问题无法解决。