代码没有使用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;