我有点麻烦,我正在使用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');
答案 0 :(得分:0)
如果使用fscanf(stdin,"%s",str)
,则在用户按Enter键时无法终止循环。这是因为%s
格式从输入流中读取下一个单词。当用户点击Enter时,它会继续从输入流中读取,直到找到一个单词。
您可以像其他人建议的那样使用fgets
。您可以逐个字符地读取输入字符并进行解析。您可能需要用户按Ctrl-D(在Unix中)而不是Enter,因为Ctrl-D报告EOF。您甚至可以使用curses
。使用fscanf(stdin,"%s",str)
和Enter,问题无法解决。