我遇到了麻烦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();
}
你的sscanf
模式是%c %s
,但你只是在阅读command
。这是故意的吗?您应该考虑检查 的返回值fgets
以确保它实际上仍在读取输入,并检查 的返回值sscanf
以确保它确实在读取两个元素(并丢弃第二个元素)。如果您的输入未正确解析和收集,并且您的check_won
函数依赖于该输入,您将看到重复输入,因为您的数组不会被重新初始化。
试试这样的东西吗?
if(fgets(input, MAX_LENGTH, stdin) == NULL) {
break;
}
在格式字符串中,您指定了 2 个元素,但您只传递了一个参数 &command。
sscanf(输入, "%c %s\n", &command);
发生的事情是即使在fgets
上失败EOF
,您正在读取fetched bysscanf
的最后一个值。因此,如果失败,请不要执行 sscanf 。input
fgets
fgets
试试这个
char command, input[MAX_LENGTH];
while ( won == 0 && fgets(input, MAX_LENGTH, stdin) ) {
sscanf(input, " %c\n", &command);
printf('%c\n', command);
check_won();
}