我在程序中创建了一个while循环,程序到达while循环,但它没有执行。我觉得有一个非常微小的错误,因为我已经看了很长时间了,所以我很遗憾。
int strbuf = 100;
char string[strbuf];
char *exit = "exit";
while(!strcmp(string, exit)){
printf("Enter a word to search. Enter exit to quit");
scanf("%s", string);
state = present(fIndex, string);
if(state){
printf("The word %s was found on line %d", string, state);
}
}
编辑:输入来自键盘。 编辑编辑:新代码(同样的问题)
int strbuf = 100;
char string[strbuf];
char *exit = "exit";
printf("Enter a word to search. Enter exit to quit\n");
scanf("%s", string);
while(!strcmp(string, exit)){
state = present(fIndex, string);
if(state){
printf("The word %s was found on line %d", string, state);
}
else printf("The word %s was not found", string);
}
答案 0 :(得分:3)
阅读strcmp
的手册页:
strcmp()函数比较两个字符串s1和s2。它 回报 如果找到s1,则小于,等于或大于零的整数, 分别小于,匹配或大于s2。
如果你有匹配,strcmp
将返回0,如果两个字符串不匹配将返回非零值。
因此while(!strcmp(string, exit))
确实在说,当字符串匹配时,继续循环播放。
string
也未初始化并包含垃圾,导致未定义的行为。如果您的循环必须至少执行 ,请先将其初始化或使用do..while
循环。
答案 1 :(得分:1)
是的, 正在执行。 while
循环的正文可能没有执行,但是因为你正在做的是未定义的行为,在它之前使用string
&#39}。初始化为有用的东西。
一个简单的解决方法是改变:
char string[strbuf];
成:
char string[strbuf] = {'\0'};
而且,为了便于阅读,你应该扩展你的比较,除非他们真的是布尔值,(并且,因为你是硬编码"退出"在一些地方,我不确定你为什么把它变成一个变量):
while (strcmp (string, "exit") != 0) {
答案 2 :(得分:0)
在与string
进行比较之前,您未获得exit
的输入。放一个:
printf("Enter a word to search. Enter exit to quit");
scanf("%s", string);
在你的while循环之前。
答案 3 :(得分:0)
如果未执行while循环,则表示!strcmp(string, exit)
为假
表示strcmp(string, exit)
必须为tru(非0)
strcmp在匹配项上返回0,因此string
与exit
原因是什么?你永远不会在字符串中放置一个值。建议将其更改为“do while”循环。
答案 4 :(得分:0)
此外, exit()是标准的C函数(参见stdlib.h)。像 strExit 这样的东西可能更适合你的目标。