while循环没有执行

时间:2012-04-10 03:17:15

标签: c loops while-loop

我在程序中创建了一个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);
}

5 个答案:

答案 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,因此stringexit

不同

原因是什么?你永远不会在字符串中放置一个值。建议将其更改为“do while”循环。

答案 4 :(得分:0)

此外, exit()是标准的C函数(参见stdlib.h)。像 strExit 这样的东西可能更适合你的目标。