我编写了使用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;
以上就是c/c++开发分享代码没有使用fgets达到语句?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/550189.html