我要求用户输入是否要退出该程序。有两个摘要。一个使用scanf()函数读取输入,而第二个使用fgets()函数读取输入。使用scanf(),程序进入无限循环。使用fgets(),程序将按预期执行。为什么scanf()失败,而fgets()起作用?我该如何纠正它以便scanf()起作用?这是代码:首先是用scanf()#include <stdio.h>#include <string.h>int main(void){ char yesNo[6]; printf("Enter [quit] to exit the program, or any key to continue"); scanf("%s", &yesNo[6]); while (strcmp(yesNo,"quit\n") != 0) { printf("Enter [quit] to exit the program, or any to continue"); scanf("%s", &yesNo[6]); } return 0;}第二个是fgets()#include <stdio.h>#include <string.h>int main(void){ char yesNo[6]; printf("Enter[quit] to exit the program, or any key to continue: "); fgets(yesNo, 6, stdin); while (strcmp(yesNo,"quit\n") != 0) { printf("Enter [quit] to exit the program, or any key to continue:"); fgets(yesNo, 6, stdin); } return 0;} 最佳答案 您要记住的scanf("%s")和fgets的区别在于它们输入的方式。%s指示scanf放弃所有前导空白字符,并读入所有非空白字符,直到出现空白字符(或EOF)为止。它将所有非空格字符存储在其对应的参数中(在本例中为yesNo),然后将最后一个空格字符留回到标准输入流(stdin)中。它还以NUL终止其相应的参数,在本例中为yesNo。fgets读取所有输入,直到换行符('\n')或读取的最大字符数作为第二个参数减负(对于NUL终止符'\0')已被读取(或直到)和所有这些输入(包括EOF)都存储在其第一个参数\n中,并且以NUL终止。因此,如果您的yesNo输入为scanf("%s", yesNo);,则quit\n仅包含yesNo,而quit将保留在\n中。由于字符串stdin和"quit"不同,因此"quit\n"不会返回零,并且strcmp循环将继续循环。对于带有输入while的fgets(yesNo, 6, stdin);,quit\n将保留yesNo,而quit\n将为空。当字符串stdin和strcmp相等时,"quit\n"返回零,并且执行退出循环。关于c - 为什么scanf失败但fgets有效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43424781/
10-11 16:12