2014-01-26 6 views
0

Я пытаюсь сделать простой калькулятор на C++. Вот часть кода:Программа не выйдет из цикла do-while

#include <iostream> 
#include <string> 
#include <cmath> 

using namespace std; 

int main() 
{ 
    int math; 
    int a1; 
    int a2 = 0; 
    int a3 = 1; 
    int answer; 
    int amount = 0; 
    int achecker = 1; 

    cout << "Welcome to my calculator! Type '1' to add, type '2' to subtract, " 
      "type '3' to multiply, type '4' to divide, and type '5' to exit." 
     << endl; 
    cin >> math; 

    while (math = 1) 
    { 
     cout << "Input how many numbers you wish to add:" << endl; 
     cin >> amount; 
     achecker = amount; 
     do 
     { 
      cout << "Input the number you wish to add:" << endl; 
      cin >> a1; 
      answer = a1 + a2; 
      a2 = a1; 
      achecker = achecker - achecker + 1; 
     } while (achecker < amount); 
     cout << answer; 
    } 

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

+5

[. Усильте уровень предупреждений] (http://coliru.stacked-crooked.com/a/fbe8856d94bfe1c6) – chris

+0

Это выражение 'achecker = achecker - achecker + 1; 'присваивает' 1' 'achecker', независимо от его предыдущего значения (подсказка:' achecker - achecker' равен нулю, ноль плюс один - один). – dasblinkenlight

+0

.. И отступ кода –

ответ

0

Прежде всего, вы должны писать время (математика == 1) sicnce математике = 1 является назначение оператора не проверка оператора.

Во-вторых, вместо в то время как, используйте если, так как вы хотите сделать расчет для добавления только один раз, поставив его в в то время как цикла будет делать это бесконечный цикл.

В-третьих, в делают - в то время как петли, условие должно быть в то время как (achecker> = 0), потому что ваше состояние будет всегда давать истинное value.So, на самом деле, нет никакой необходимости achecker, просто держите декрементирующую величину по одному для каждого цикла и сохраняйте условие как while (amount> = 0).

Один, более улучшение я хотел бы предложить, хотя и не обязательно - объявить ответ, как INT ответ = 0;. Для каждого цикла пропустите, примите новое значение в a1, а затем для добавления, напишите answer = answer + a1. Это должно служить вашей цели.

Так, отредактированный код по мне должно быть -

#include <iostream> 
#include <string> 
#include <cmath> 

using namespace std; 

int main() 
{ 
    int math; 
    int a1; 
    int a3 = 1; 
    int answer = 0; 
    int amount = 0; 
    int achecker = 1; 

    cout << "Welcome to my calculator! Type '1' to add, type '2' to subtract, type '3' to  multiply, type '4' to divide, and type '5' to exit." << endl; 
    cin >> math; 

    if(math == 1){ 
    cout << "Input how many numbers you wish to add:" << endl; 
    cin >> amount; 
    do{ 
    cout << "Input the number you wish to add:" << endl; 
    cin >> a1; 
    answer = answer + a1; 
    amount = amount - 1; 
    }while(amount>=0); 
    cout << answer; 
    } 
1

У вас неправильная проверка состояния во время цикла.

match=1 - операция присвоения, а не проверка равенства, что вы пытаетесь сделать. Назначение всегда будет возвращать 1 (true), чтобы у вас был бесконечный цикл.

match=1 заменить с match==1 для вашего кода для работы

+0

Спасибо, но он все еще продолжает цикл через цикл do. – TheBlackSword

+0

значение количества печати для выполнения отладки. это поможет –

1

achecker = achecker - achecker + 1; всегда равен 1. Так что я думаю, что у вас есть ошибка в этой строке.

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