0

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

5 回答 5

3

阅读手册页strcmp

strcmp() 函数比较两个字符串 s1 和 s2。如果发现 s1 分别小于、匹配或大于 s2,则它返回一个小于、等于或大于零的整数。

如果有匹配,strcmp将返回 0,如果两个字符串匹配,则返回非零值。

因此while(!strcmp(string, exit))真的是说,当字符串匹配时,继续循环。

string也未初始化并包含垃圾,导致未定义的行为。do..while如果你的循环必须至少执行一次,要么先初始化它,要么使用循环。

于 2012-04-10T03:24:19.040 回答
1

是的,它正在执行。循环的主体可能没有被执行,while但那是因为你正在做的是未定义的行为,string在它被初始化为任何有用的东西之前使用。

一个简单的解决方法是更改​​:

char string[strbuf];

进入:

char string[strbuf] = {'\0'};

而且,为了便于阅读,您应该扩展您的比较,除非它们真的布尔值,(而且,由于您在一些地方硬编码“退出”,我不确定您为什么将它作为一个变量):

while (strcmp (string, "exit") != 0) {
于 2012-04-10T03:25:02.453 回答
0

string将其与exit. 放一个:

printf("Enter a word to search. Enter exit to quit");
scanf("%s", string);

在你的 while 循环之前。

于 2012-04-10T03:21:26.003 回答
0

如果没有执行while循环,则表示!strcmp(string, exit)为假

这意味着strcmp(string, exit)必须是 tru(非 0)

strcmp 在匹配时返回 0,因此stringexit

这是什么原因?您永远不会在字符串中输入值。建议将其更改为“do while”循环。

于 2012-04-10T03:24:47.460 回答
0

此外,exit()是一个标准的 C 函数(参见 stdlib.h)。strExit 之类的东西可能更适合您的目标。

于 2012-04-10T03:29:58.970 回答