为什么 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
并将其存储在缓冲区中,因此您总是将 quit
与 quit\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"
。
在我的程序的这个迷你版本中,我要求用户输入。当输入为 '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
并将其存储在缓冲区中,因此您总是将 quit
与 quit\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"
。