代码没有使用fgets达到语句?

我编写了使用fgets函数的代码,该函数具有调用代码中其他函数的多个条件,即aMethod和bMethod。

int main(void) { char buffer[1024]; while (fgets(buffer, 1024, stdin)) { if ((strcasecmp(buffer,"a")) == 0) { aMethod(); } if ((strcasecmp(buffer, "b")) == 0) { bMethod(); } } } 

我不确定为什么它没有达到if语句。 任何帮助都会很棒,谢谢。

如有疑问,请将其打印出来:

 int main(void) { char buffer[1024]; while (fgets(buffer, 1024, stdin)) { fprintf(stderr, "BUFFER is [%s]\n", buffer); /* <==== */ if ((strcasecmp(buffer,"a")) == 0) { aMethod(); } if ((strcasecmp(buffer, "b")) == 0) { bMethod(); } } } 

你会发现很多这样的错误。

您忘记了fgets()将换行符留在缓冲区中(除非输入的行太长)。 因此,输入字符串无法与您要比较的任何字符串进行比较。

此外,标准C中没有strcasecmp()这样的函数。它是POSIX函数。

你忘了fgets\n字符消耗在缓冲区中。 通过使用string.h的cool函数strcspn()其剥离。 在if语句之前添加以下内容:

 buffer[strcspn(buffer,"\n")] = 0; 

或者,您可以使用熟悉的strlen()函数:

 size_t len = strlen(buffer); if(len > 0 && buffer[len-1] == '\n') buffer[len-1] = 0;