2013-10-28 1 views
1

Я не уверен, почему я получаю бесконечный цикл, когда запускаю этот код. Я могу заставить его нормально работать без функции, но это победит цель всего, что я буду пытаться сделать. Может ли кто-нибудь позаботиться о том, что происходит с этой функцией, которая приводит к сбою моей программы?Простая бесконечная петля с функцией 0:

#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++; 
    } 
} 
+0

Бог, я немой, извините, ребята, спасибо большое. Я работаю над кодом более 10 часов. Это доходит до меня. – user2925439

+0

Нет проблем, сделайте все одолжение и выберите ответ, хотя! Таким образом, он закрывается. – Nava2

ответ

2

Вам нужен фигурную скобку в вашем состоянии, здесь:

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

Без которого всегда будет возвращать true (возвращение 1) и, следовательно, бы создать a бесконечный цикл в вашем main().

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

У вас есть пара скобок ({}) отсутствует:

 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 
      } 
     } 
1

Это:

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 
} 

Если его более одной линии, необходимо иметь брекеты. . Правило большого пальца, всегда ставлю их в

0
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 
    } 

проблема здесь в состоянии, если .. компилятор читает как: если manStatus [я] == -1 Е («строка») еще возвращение 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 
} 

, а также, когда вы отправляете manStatus в цикле, пока вы только посылая первый элемент не весь массив так функция «checkStatus» всегда проверяет первый элемент снова и снова, поэтому он возвращает один и тот же результат снова и снова, создавая бесконечный цикл, который у вас был раньше.

желающий эта помогло.