fgets和sscanf获取列表值两次

时间:2013-05-07 04:27:41

标签: c fgets scanf

我遇到了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();
}

3 个答案:

答案 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();
    }