繁体   English   中英

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

[英]How to terminate while loop using fscanf with stdin stream

我有点麻烦,我正在使用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' )

//所有运算符组合的第3个

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');

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM