2014-02-18 7 views
-1

Хорошо, поэтому у меня здесь небольшая проблема. Не против комментариев в коде, который они там для меня.Бесконечный цикл: почему это так бесконечно

моя проблема есть в функции. Я хочу, чтобы это проверилось, чтобы снова убедиться в [0] = y или n. И если он не зацикливается до тех пор, пока я не введу правильное число.

Теперь то, что он делает:. Он не зацикливается вокруг конца не матер, что я положил в

ли я что-то пропустил я уверен, что он сделал.

#include <stdio.h> 
#include <conio.h> 
#include <stdlib.h> 
#include <cstdio> 

//functions called 
float wages_loop(); 

//start main 
int main(void) 
{ 
    char status[10], another[10]; 
    char buffer[80]; 

    float wages, other_income, interest, dividends, test; 
    int dependents; 
    int single_acc = 0, mj_acc = 0, ms_acc = 0, sh_acc = 0; 

    printf("Would you like to start: "); 
    gets_s(another); 

    while (another[0] = 'y') 
    { 
     //printf("What is your Status: "); 
     //gets_s(status); 


     wages = wages_loop(); 



     //printf("\n How much in Other Income. "); 
     //gets_s(buffer); 
     //other_income = atof(buffer); 

     //printf("\n How much in interest. "); 
     //gets_s(buffer); 
     //interest = atof(buffer); 

     //printf("\n How much in Dividends. "); 
     //gets_s(buffer); 
     //dividends = atof(buffer); 

     //printf("\n How many Dependents. "); 
     //gets_s(buffer); 
     //dependents = atoi(buffer); 

     printf("\n\n\t\t Your wage is: %.2f \n", wages); 
     system("pause"); 
    } //end loop 

    printf("\n\n\t\t\t Number of Singles filleing: %i \n", single_acc); 

    return 0; 

}//end main 


float wages_loop() 
{ 
    char again[10]; 
    char buffer[80]; 
    float wages, total_wages = 0; 

    printf("\n How much in Wages. "); 
    gets_s(buffer); 
    wages = atof(buffer); 

    total_wages = wages + total_wages; 

    printf("\n Do you have any more wages. (y or n)"); 
    gets_s(again); 

    if (again[0] != 'y' || 'n') 
    { 
     while (again[0] != 'y' || 'n') 
     { 
      printf("\n\n INCORRCT ANSWER. \n\n"); 
      printf("\n Do you have any more wages. (y or n)"); 
      gets_s(again); 
     } 
    } 

    while (again[0] = 'y') 
    { 
     printf("\n Enter Wages: "); 
     gets_s(buffer); 
     wages = atof(buffer); 

     total_wages = wages + total_wages; 

     printf("\n Do you have any more wages. "); 
     gets_s(again); 
    } 

    return total_wages; 
} 
+2

Typo, вы использовали назначение ('='), должно было использовать равенство ('=='). –

+4

Маленький. Воспроизводимые. Прецедент. –

+1

Поднимите предупреждения своего компилятора, и он точно скажет вам, что случилось. – chris

ответ

9
while (another[0] = 'y') 

Это назначение, а не равенство. Изменение = к ==

EDIT: Вы сделали это снова здесь:

while (again[0] = 'y') 

также:

(again[0] != 'y' || 'n') 

Должно быть

(again[0] != 'y' && again[0] != 'n') 

Поскольку 'n' сама по себе всегда возвращает истину

(спасибо Jonathan Henson)

EDIT2: Как Сэм я отметил в комментариях, вы не устанавливая another[0] внутри цикла, так что он будет оставаться бесконечной, даже если вы изменили оператору ==, добавьте инструкцию, чтобы снова захватить пользовательский ввод.

EDIT3: Как указано в log0, вы можете избежать этой проблемы в будущем, включив уровни предупреждения на своем компиляторе.

+0

не забудьте вызывать || 'n', который всегда будет возвращать true. –

+0

@ user3255517 Ваш компилятор должен предупредить вас об этом состоянии цикла. Вероятно, вам необходимо изменить уровень предупреждения. – log0

+0

@JonathanHenson: Спасибо, исправлено. – AndyG

Смежные вопросы