在我的程序的迷你版中,我要求用户输入。当输入为“退出”或“退出”时,我希望程序退出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;
}
答案 0 :(得分:1)
fgets
读取结尾的\n
并将其存储在缓冲区中,因此您总是将quit
与quit\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"
。