1

我遇到了麻烦sscanffgets它似乎在哪里获取最后一个值输入并重新读取它,即使我们已经到了文件的末尾。我的代码:

while (won == 0) {
 char command, input[MAX_LENGTH];
 fgets(input, MAX_LENGTH, stdin);

 sscanf(input, " %c\n", &command);

 printf('%c\n', command);
 check_won();
}
4

3 回答 3

4

你的sscanf模式是%c %s,但你只是在阅读command。这是故意的吗?您应该考虑检查 的返回值fgets以确保它实际上仍在读取输入,并检查 的返回值sscanf以确保它确实在读取两个元素(并丢弃第二个元素)。如果您的输入未正确解析和收集,并且您的check_won函数依赖于该输入,您将看到重复输入,因为您的数组不会被重新初始化。

试试这样的东西吗?

if(fgets(input, MAX_LENGTH, stdin) == NULL) {
    break;
}
于 2013-05-07T04:31:56.697 回答
0

在格式字符串中,您指定了 2 个元素,但您只传递了一个参数 &command。

sscanf(输入, "%c %s\n", &command);

于 2013-05-07T04:32:23.770 回答
0

发生的事情是即使在fgets上失败EOF,您正在读取fetched bysscanf的最后一个值。因此,如果失败,请不要执行 sscanf 。inputfgetsfgets

试试这个

    char command, input[MAX_LENGTH];

    while ( won == 0 &&  fgets(input, MAX_LENGTH, stdin) ) {
     sscanf(input, " %c\n", &command);
     printf('%c\n', command);
     check_won();
    }
于 2013-05-07T04:44:59.973 回答