【问题标题】:Simple Infinite Loop w/ Function in CC语言中带有函数的简单无限循环
【发布时间】:2026-02-25 05:15:01
【问题描述】:

我不确定为什么在运行此代码时会出现无限循环。如果没有该功能,我可以让它运行得很好,但这会破坏我将要尝试做的所有事情的目的。谁能花点时间看看这个函数是怎么回事导致我的程序崩溃?

#include <stdio.h>
#define ROWS 5

int checkStatus(int manStatus[]) {

    int i;
        for(i = 0; i < ROWS; i++)
        {
            if(manStatus[i] == -1)
                printf("Sorry, but %d is still single!\n", i);
                return 1; //True
        }
        return 0; //False
    }

void main() {

    int manStatus[ROWS];
    int i=0;

    //Initialize each man to -1, as in single:
    for(i=0; i < ROWS; i++) {
        manStatus[i] = -1;
    }

    i=0;
    while ( (checkStatus(manStatus) ) ) {

        printf("Still Single People!");
        manStatus[i] = 0;
        i++;
    }
}

【问题讨论】:

  • 天哪,我很笨,对不起,非常感谢。我已经在一段代码上工作了 10 多个小时。它正在接近我。
  • 没问题,帮大家一个忙,然后选择一个答案!这样它就关闭了。

标签: c function loops while-loop infinite


【解决方案1】:

尽管出现了这段代码,但这两条语句并没有组合在一起:

if(manStatus[i] == -1)
    printf("Sorry, but %d is still single!\n", i);
    return 1; //True

这实际上意味着您的函数每次都返回 1.... 不依赖于 if 语句。

你真正想要的是:

 if(manStatus[i] == -1)
 {
     printf("Sorry, but %d is still single!\n", i);
     return 1; //True   ==> INSIDE the If-statement <==
 }

【讨论】:

    【解决方案2】:

    你需要一个花括号,在这里:

        if(manStatus[i] == -1)
           {
                printf("Sorry, but %d is still single!\n", i);
                return 1; //True
           }
    

    没有 which 将始终返回 true(返回 1),因此 会在您的main() 中创建一个无限循环

    【讨论】:

      【解决方案3】:

      您缺少一对大括号 ({}):

              for(i = 0; i < ROWS; i++)
              {
                  if(manStatus[i] == -1)
                      printf("Sorry, but %d is still single!\n", i);
                      return 1; //True
              }
      

      改成这样:

              for(i = 0; i < ROWS; i++)
              {
                  if(manStatus[i] == -1)
                  {
                      printf("Sorry, but %d is still single!\n", i);
                      return 1; //True
                  }
              }
      

      【讨论】:

        【解决方案4】:

        这个:

        if(manStatus[i] == -1)
            printf("Sorry, but %d is still single!\n", i);
            return 1; //True
        

        应该是:

        if(manStatus[i] == -1) {
            printf("Sorry, but %d is still single!\n", i);
            return 1; //True
        }
        

        如果超过一行,则需要大括号。经验法则,总是把它们放进去。

        【讨论】:

          【解决方案5】:
              int checkStatus(int manStatus[]) {
          
              int i;
              for(i = 0; i < ROWS; i++)
              {
                  if(manStatus[i] == -1)
                      printf("Sorry, but %d is still single!\n", i);
                  return 1; //True
              }
              return 0; //False
              }
          

          if 条件中的问题.. 编译器将其读取为: if manStatus[i] == -1 printf("string") else return 1;

          所以你弄乱了一个花括号,试试这个:

           int checkStatus(int manStatus[]) {
          
          int i;
          for(i = 0; i < ROWS; i++)
          {
              if(manStatus[i] == -1)
              {
                  printf("Sorry, but %d is still single!\n", i);
                  return 1; //True
              }
          }
          return 0; //False
           }
          

          当你在 while 循环中发送 manStatus 时,你只发送第一个元素而不是整个数组,所以“checkStatus”函数总是一遍又一遍地检查第一个元素。所以它会返回相同的结果over .. 制作你之前的无限循环。

          希望有所帮助。

          【讨论】: