我遇到了sscanf
和fgets
的问题,它似乎正在获取最后一个值输入并重新读回来,即使我们已经到了文件的末尾。我的代码:
while (won == 0) {
char command, input[MAX_LENGTH];
fgets(input, MAX_LENGTH, stdin);
sscanf(input, " %c\n", &command);
printf('%c\n', command);
check_won();
}
答案 0 :(得分:4)
您的sscanf
模式为%c %s
,但您只是在阅读command
。这是故意的吗?您应该考虑检查fgets
的返回值,以确保它仍然实际读取输入,并检查sscanf
的返回值,以确保它确实正在读取两个元素(并丢弃第二个元素)。如果您的输入未被正确解析和收集,并且您的check_won
函数依赖于该输入,您将看到重复输入,因为您的数组不会被重新初始化。
尝试这样的事情吗?
if(fgets(input, MAX_LENGTH, stdin) == NULL) {
break;
}
答案 1 :(得分:0)
在格式字符串中,您指定了2个元素,但是您只传递了一个参数& command。
sscanf(输入,“%c%s \ n”,&命令);
答案 2 :(得分:0)
即使fgets
EOF
失败,sscanf
正在读取由input
提取的fgets
的最后一个值,但发生了什么。所以如果fgets
失败,请不要使用sscanf。
试试这个
char command, input[MAX_LENGTH];
while ( won == 0 && fgets(input, MAX_LENGTH, stdin) ) {
sscanf(input, " %c\n", &command);
printf('%c\n', command);
check_won();
}