我正在尝试制作一个测验程序,从一个文件读取问题并从另一个文件中回答,将它们放在字符串中并将它们与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;
}
答案 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);
}