2016-09-27 2 views
-2

나는이 프로그램을 작성하여 intro to comp sci 클래스로 작성했습니다. 모두 그것이 while 루프를 사용하는 데모입니다. 교수님은이 프로그램에 무한 루프가 있다고 표시했지만, -1이 입력되면 종료되는 무한 루프라는 것을 이해하지 못합니다.무한 루프는 어떻게 발생합니까?

int main() { 

int accountNum, balance, totalOfItems, totalOfCredits, creditLimit; //Integers for the user to input 

while (accountNum != -1) 
{ 
    cout << "Enter account number" << endl; 
    cin >> accountNum; 
    cout << "Enter balance" << endl; 
    cin >> balance; 
    cout << "Enter total of all items charged this month" << endl; 
    cin >> totalOfItems; 
    cout << "Enter total of all credits applied to the account this month" << endl; 
    cin >> totalOfCredits; 
    cout << "Enter credit limit" << endl; 
    cin >> creditLimit; 

    int newBalance = balance + totalOfItems - totalOfCredits; 

    if (newBalance > creditLimit) 
    { 
     cout << "Account Number: " << accountNum << "\nCredit Limit: " << creditLimit << "\nNew Balance " << newBalance << endl; 
     cout << "Credit limit exceeded." << endl; 
    } else { 
     cout << "New balance : " << newBalance << endl; 
    } 
} 
return 0; 
} 
+4

교수님 께 물어 보셨습니까? – kfsone

+0

내가 뭔가를 놓치지 않는 한, 나는 당신이 옳다고 생각합니다. 이 루프는 종료 될 수 있습니다. – Carcigenicate

+0

이러한 문제를 해결하는 올바른 도구는 디버거입니다. 스택 오버플로를 묻기 전에 코드를 단계별로 실행해야합니다. 자세한 도움말은 [작은 프로그램 디버깅 방법 (Eric Lippert 작성)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)을 참조하십시오. 문제를 재현하는 [최소, 완료 및 확인 가능] (http://stackoverflow.com/help/mcve) 예제와 함께 해당 질문을 \ [편집]해야합니다. 디버거. –

답변

6

표시된 코드에 여러 가지 버그가 있습니다.

  1. accountNum은 초기화되지 않습니다. 이로 인해 정의되지 않은 동작이 발생합니다.

  2. -1이 입력 된 경우에도 루프는 여전히 흐트러지고 나머지 입력은 모두 입력해야합니다.

  3. 잘못된 입력을 입력하면 std::cin이 오류 상태가되어 영원히 반복됩니다.

1

표시된 코드 은 입력이이고 -1을 입력해야합니다. 입력 스트림이 닫히거나 오류 (숫자 중 하나에 숫자가 아닌 값을 입력하는 경우)가 발생하면 -1 값을받지 못합니다.

while 루프 조건은 각 루프 반복의 시작 부분에서만 테스트됩니다. 가드 테스트가 아닙니다. 따라서 -1의 계정을 입력해도 나머지 값은 모두 입력해야합니다.

0

왜냐하면 -1의 조건이 루프 내에서 충족되지 않았기 때문입니다. 나는 이것이 결코 생각할 겁니다

cin >> accountNum; 

-1 :

나는 첫 번째 항목을 참조하십시오.

루프를 종료하려면 루프의 코드 끝에 -1로 accountNum의 값을 저장해야합니다.

관련 문제