2015-03-02 5 views
0

Я построил простую программу, которая должна взять сумму в центах, которую пользователь вводит и выводит ее в виде долларов и центов, однако, когда я ее запускаю, запрашивает у меня сумму, я ее ввожу, и программа не продолжается. Я новичок в программировании и дорого бы признателен за любую помощь я могу получить по этому вопросуКод не выходит за рамки ввода

#include <iostream> 

    using namespace std; 

    int main() 
    { 
     int numb; 
     int dollars=0; 
     int cents=0; 

     cout << "Enter the amount" << endl; 
     cin >> numb; 

     while (numb>=0); 
     { 
      dollars=int(numb/100); 
      cents=numb%100; 
     } 

     cout << dollars << "dollars" << cents << "cents"<<endl; 

     return 0; 
    } 
+2

: Почему здесь используется цикл while? – Sumeet

+2

попробуйте использовать отладчик и найти ошибку самостоятельно – Imran

ответ

0

У вас есть бесконечный цикл с вашей «а» блока, потому что онемели всегда положительна (это не меняет для любого итерация).
Попробуйте удалить цикл while, чтобы программа продолжалась.

#include <iostream> 

using namespace std; 

int main() 
{ 
    int numb; 
    int dollars=0; 
    int cents=0; 

    cout << "Enter the amount" << endl; 
    cin >> numb; 

    dollars=int(numb/100); 
    cents=numb%100; 

    cout << dollars << "dollars" << cents << "cents" << endl; 

    return 0; 
} 

Вы также можете посмотреть другие ответы, которые дают вам способы использовать цикл для повторного запроса (действительных) пользовательских входов.

+0

Я уверен, что цикл while должен обрабатывать недопустимые входы (т. Е. Отрицательные значения), поэтому не стоит говорить ему, чтобы он удалил его, по крайней мере, Причина, почему. Кроме того, этот код также не обрабатывает нечисловые цифры. –

+0

Действительно, я должен объяснить, почему. Я отредактировал свой ответ в этом направлении. Что касается вопроса, ОП пытается допустить, чтобы программа продолжалась; Я думаю, что ваш ответ является хорошим продолжением его простой программы. – birdypme

1

Этот цикл не имеет никакого смысла. Убери это.

while (numb>=0); // remove this line and the '{' '}' 
{ 
    dollars=int(numb/100); 
    cents=numb%100; 
} 

Как правило, при использовании циклов проверьте, что они будут завершены. Вы проверяете каждую итерацию, что numb>=0, но внутри цикла numb никогда не изменяет его значение. Таким образом, программа выполняет этот цикл навсегда.

0

вы сделали бесконечный цикл

while (numb>=0); 
     { 
      dollars=int(numb/100); 
      cents=numb%100; 
     } 

онемел является, скажем, 3, так что это всегда-> = 0 равно верно, следовательно, вы neverexit петли,

+0

Вы сделали сумасшедший отступ. Как так? –

2

ниже код должен работать, как вы ожидали. Прочтите комментарии, которые я вставлял в ваш код для получения дополнительной информации. Кроме того, вы можете вставить дополнительную проверку в цикле для недопустимого ввода (т. Е. Нецифровые символы), поскольку это приведет к тому, что цикл войдет в бесконечный цикл.

EDIT: Я обновил код с дополнительной проверкой для обработки недопустимого нечислового ввода пользователем.

#include <iostream> 
using namespace std; 

int main() 
{ 
    int numb = 0; 
    int dollars=0; 
    int cents=0; 

    cout << "Enter the amount" << endl; 

    // I suspect your while loop here is to keep soliciting input 
    // if the input is not valid, so I've moved the "cin" into the loop. 
    // Don't use semi colon here after the while statement because 
    // in doing so, you're eliminating the body of the loop. 
    while (numb <= 0) 
    { 
     cin >> numb; 
     if(cin.fail()) { 
      cin.clear(); 
      cin.ignore(numeric_limits<int>::max(), '\n'); 
      cout << "Non numeric input, please try again." << endl; 
      continue; 
     } 
     cout << "numb: " << numb << endl; 
     dollars=int(numb/100); 
     cents=numb%100; 
    } 

    // I've inserted extra spaces around dollars and cents here 
    // to make the output more readable. 
    cout << dollars << " dollars " << cents << " cents"<<endl; 

    return 0; 
} 
Смежные вопросы