2016-09-27 2 views
-2

Я написал эту программу для введения в класс 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

Правильный инструмент для решения таких проблем - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (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.

Чтобы закончить цикл, вам нужно будет сохранить значение в accountNum как -1 в конце кода вашего цикла.

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

  • Нет связанных вопросов^_^