代码没有使用fgets达到声明?

时间:2015-04-26 08:15:23

标签: c if-statement 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语句。 任何帮助都会很棒,谢谢你。

3 个答案:

答案 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功能。