为什么 strcmp 不返回 0

Why is strcmp not returning 0

在我的程序的这个迷你版本中,我要求用户输入。当输入为 'quit' 或 'exit' 我希望程序退出 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;
}

fgets 读取尾随 \n 并将其存储在缓冲区中,因此您总是将 quitquit\n.

进行比较

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

fgets 读取输入时,它还会读取输入末尾的换行符 并在有足够的 space 时存储它 .这意味着如果你输入"quit",那么request实际上会包含"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"