我编写了使用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语句。 任何帮助都会很棒,谢谢你。
答案 0 :(得分:1)
如有疑问,请将其打印出来:
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();
}
}
}
你会发现很多这样的错误。
答案 1 :(得分:0)
您忘记了fgets
将\n
字符用于缓冲区。使用string.h
中的酷函数strcspn()
将其剥离。在if
语句之前添加以下内容:
buffer[strcspn(buffer,"\n")] = 0;
或者,您可以使用熟悉的strlen()
函数:
size_t len = strlen(buffer);
if(len > 0 && buffer[len-1] == '\n')
buffer[len-1] = 0;
答案 2 :(得分:0)
您忘记fgets()
将换行符留在缓冲区中(除非输入的行太长)。因此,输入字符串无法与您要比较的任何字符串进行比较。
此外,标准C中没有strcasecmp()
这样的功能。它是POSIX功能。