为什么strcmp不返回0

时间:2018-10-04 17:21:49

标签: c strcmp

在我的程序的迷你版中,我要求用户输入。当输入为“退出”或“退出”时,我希望程序退出while循环。 strcmp函数似乎没有按我期望的那样工作。我花了一些时间寻找答案,但找不到问题。有什么想法吗?

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define BUFFER_SIZE 100
int main() {
    char request[BUFFER_SIZE];
    while(strcmp(request, "quit") != 0 && strcmp(request, exit) != 0) {
        fgets(request, BUFFER_SIZE, stdin);
    }
    return 0;
}

2 个答案:

答案 0 :(得分:1)

fgets读取结尾的\n并将其存储在缓冲区中,因此您总是将quitquit\n进行比较。

此外,while循环在第一次检查其条件时,可能会发生非常糟糕的事情,因为您的request数组未初始化。

答案 1 :(得分:1)

fgets读取输入时,它还会读取输入末尾的换行符,如果有足够的空间存储换行符。这意味着,如果您输入“ quit”,则请求实际上将包含“ quit \ n”。

此外,在循环中,request第一次不包含任何内容,因此您正在读取未初始化的值。

在这种情况下,最简单的操作是将换行符添加到要检查的字符串中,并将while循环更改为do..while循环,以便最后进行检查:

do {
    fgets(request, BUFFER_SIZE, stdin);
} while(strcmp(request, "quit\n") != 0 && strcmp(request, "exit\n") != 0);

还要注意,您是在第二次调用中传递函数exit,而不是字符串"exit"