strcmp()在程序中不起作用

时间:2017-02-18 11:10:14

标签: c strcmp

我正在尝试制作一个测验程序,从一个文件读取问题并从另一个文件中回答,将它们放在字符串中并将它们与strcmp()进行比较,但由于某种原因,当我输入正确的文件时,它不起作用回答说它不正确。任何帮助将不胜感激。

我的代码

int main()
{

    FILE *fpq = fopen("questions.txt", "r");
    FILE *fpa = fopen("answers.txt", "r");

    char question[256];
    char answer[256];
    char user_input[256];

    fgets(question, 256, fpq);
    fgets(answer, 256, fpa);

    puts(question);
    fgets(user_input, 256, stdin);
    if(strcmp(user_input, answer) == 0)
    {
      printf("Good job!\n");
    }
    else
    {
      printf("Nope its:\n");
      puts(answer);
    }
    fclose(fpq);
    fclose(fpa);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

fgets()在读入缓冲区的字符串末尾添加换行符\n
 请参阅此答案,该答案将进一步解释Is trailing newline necessary in fgets?

也许这就是您的代码无效的原因,请检查字符串末尾的新行并将其删除。

在删除换行\n字符时,您可以参考Removing trailing newline character from fgets() input

此问题也与您的问题相同[{3}}。这对你很有帮助。

正如Paul Oglive所说,在评论中学会使用调试器,它总会有所帮助。

答案 1 :(得分:-1)

您可以使用strncmp来解决您的问题。您需要提供要比较的字符数。

if(strncmp(user_input, answer, strlen(user_input) == 0)
{
  printf("Good job!\n");
}
else
{
  printf("Nope its:\n");
  puts(answer);
} 

See-example-here