Member 13518271 Ответов: 3

Нужна помощь от C++ с калькулятором


Мой цикл DO/WHILE не работает. Помогите мне тоже найти ошибку, пожалуйста!!


#include<iostream>
#include<conio.h>
#include<process.h>
using namespace std;

int main()
{  
	char exit;
  float a,b,result;
  int s1,s2,s3,s4,s5;
	do {
  cout<<"========== WELCOME TO MY CALCULATOR ==========\n1.Arithmetic operations\n2.Trigonometric Functions\n3.Logarithmic Functions\n4.Power Functions\n5.Exit\n";
  cin>>s1;

  switch (s1) {
  case 1:
	cout<<"1.Addition"<<endl;
	cout<<"2.Substraction"<<endl;
	cout<<"3.Multiplication"<<endl;
	cout<<"4.Division"<<endl;
	cout<<"Choose operator by number:";
	cin>>s2;
	switch (s2) {

	  case 1: 
	     cout<<"Enter first value: ";
	     cin>>a;
	     cout<<"Enter second value: ";
	     cin>>b;
	     result=a+b;
	     cout<<"Your result is: "<<result<<endl;
	     break;

	  case 2: 
	     cout<<"Enter first value: ";
	     cin>>a;
	     cout<<"Enter second value: ";
	     cin>>b;
	     result=a-b;
	     cout<<"Your result is: "<<result;
	     break;

	  case 3:
		cout<<"Enter first value: ";
	    cin>>a;
	    cout<<"Enter second value: ";
	    cin>>b;
	    result=a*b;
	    cout<<"Your result is: "<<result;
	    break;
	
	  case 4:cout<<"Enter first value: ";
	    cin>>a;
	    cout<<"Enter second value: ";
	    cin>>b;
	    result=a/b;
	    cout<<"Your result is: "<<result;
	    break;
}
break;

	case 2:
    cout<<"1.Sin function"<<endl;
	cout<<"2.Cos function"<<endl;
	cout<<"3.Tan function"<<endl;
	cout<<"Choose operator by number:"<<endl;
	cin>>s3;
	switch (s3) {

	  case 1: 
	     cout<<"Enter a number: ";
	     cin>>a;
	     result=(sin(a));
	     cout<<"Your result is: "<<result<<endl;
	     break;

	  case 2: 
	     cout<<"Enter a number: ";
	     cin>>a;
	     result=(cos(a));
	     cout<<"Your result is: "<<result<<endl;
	     break;

	  case 3:
		 cout<<"Enter a number: ";
	     cin>>a;
	     result=(tan(a));
	     cout<<"Your result is: "<<result<<endl;
	     break;
}
break;

	case 3:
    cout<<"1.Natural log"<<endl;
	cout<<"2.Log with base 10 "<<endl;
	cout<<"Choose operator by number:"<<endl;
	cin>>s4;
	switch (s4) {

		 case 1: 
	     cout<<"Enter a number: ";
	     cin>>a;
	     result=(log(a));
	     cout<<"Your result is: "<<result<<endl;
	     break;

	     case 2: 
	     cout<<"Enter a number: ";
	     cin>>a;
	     result=(log10(a));
	     cout<<"Your result is: "<<result<<endl;
	     break;
}
break;

	case 4:
    cout<<"1.Power"<<endl;
	cout<<"2.Square root"<<endl;
	cout<<"Choose operator by number:"<<endl;
	cin>>s5;
	switch (s5) {
		
		 case 1: 
	     cout<<"Enter first value: ";
	     cin>>a;
	     cout<<"Enter second value: ";
	     cin>>b;
	     result=pow(a,b);
	     cout<<"Your result is: "<<result<<endl;
	     break;

	     case 2: 
	     cout<<"Enter a number: ";
	     cin>>a;
	     result=sqrt(a);
         cout<<"Your result is: "<<result<<endl;
	     break;
}
break;

	case 5:{
		cout<< "Are you sure you want to leave this program? Press Y to stay or else press any key to leave " << endl;
		break;
		   }
		   break;
}
cout<< "Press Y to continue or else press any key to leave program:";
cin>>a;
}while (exit == 'y');
}


Что я уже пробовал:

Я не мог найти решение для этого. Ошибка дает переменную "exit", которая используется без инициализации.

Richard MacCutchan

Избавьтесь от всего этого дублированного кода. Сначала запросите номера и операторов и убедитесь, что они действительны. Только после этого вам нужно использовать блок переключателя для выполнения вычислений. И только в конце блока переключателей вам нужно распечатать результат.

3 Ответов

Рейтинг:
2

KarstenK

Ответ на ваш вопрос заключается в том, что "выход" должен быть инициализирован следующим образом:

char exit = 'n';//no exit

Более интуитивным является кодирование цикла таким образом:
while (exit != 'y');

Для лучшего опыта программирования я бы рефакторировал ваш "спагетти-код" в некоторые функции.


Рейтинг:
2

Patrice T

Научитесь правильно делать отступы в вашем коде, это покажет его структуру, и это поможет чтению и пониманию.

#include<iostream>
#include<conio.h>
#include<process.h>
using namespace std;

int main()
{
  char exit;
  float a,b,result;
  int s1,s2,s3,s4,s5;
  do {
    cout<<"========== WELCOME TO MY CALCULATOR ==========\n1.Arithmetic operations\n2.Trigonometric Functions\n3.Logarithmic Functions\n4.Power Functions\n5.Exit\n";
    cin>>s1;

    switch (s1) {
    case 1:
      cout<<"1.Addition"<<endl;
      cout<<"2.Substraction"<<endl;
      cout<<"3.Multiplication"<<endl;
      cout<<"4.Division"<<endl;
      cout<<"Choose operator by number:";
      cin>>s2;
      switch (s2) {

      case 1:
        cout<<"Enter first value: ";
        cin>>a;
        cout<<"Enter second value: ";
        cin>>b;
        result=a+b;
        cout<<"Your result is: "<<result<<endl;
        break;

      case 2:
        cout<<"Enter first value: ";
        cin>>a;
        cout<<"Enter second value: ";
        cin>>b;
        result=a-b;
        cout<<"Your result is: "<<result;
        break;

      case 3:
        cout<<"Enter first value: ";
        cin>>a;
        cout<<"Enter second value: ";
        cin>>b;
        result=a*b;
        cout<<"Your result is: "<<result;
        break;

      case 4:cout<<"Enter first value: ";
        cin>>a;
        cout<<"Enter second value: ";
        cin>>b;
        result=a/b;
        cout<<"Your result is: "<<result;
        break;
      }
      break;

    case 2:
      cout<<"1.Sin function"<<endl;
      cout<<"2.Cos function"<<endl;
      cout<<"3.Tan function"<<endl;
      cout<<"Choose operator by number:"<<endl;
      cin>>s3;
      switch (s3) {

      case 1:
        cout<<"Enter a number: ";
        cin>>a;
        result=(sin(a));
        cout<<"Your result is: "<<result<<endl;
        break;

      case 2:
        cout<<"Enter a number: ";
        cin>>a;
        result=(cos(a));
        cout<<"Your result is: "<<result<<endl;
        break;

      case 3:
        cout<<"Enter a number: ";
        cin>>a;
        result=(tan(a));
        cout<<"Your result is: "<<result<<endl;
        break;
      }
      break;

    case 3:
      cout<<"1.Natural log"<<endl;
      cout<<"2.Log with base 10 "<<endl;
      cout<<"Choose operator by number:"<<endl;
      cin>>s4;
      switch (s4) {

      case 1:
        cout<<"Enter a number: ";
        cin>>a;
        result=(log(a));
        cout<<"Your result is: "<<result<<endl;
        break;

      case 2:
        cout<<"Enter a number: ";
        cin>>a;
        result=(log10(a));
        cout<<"Your result is: "<<result<<endl;
        break;
      }
      break;

    case 4:
      cout<<"1.Power"<<endl;
      cout<<"2.Square root"<<endl;
      cout<<"Choose operator by number:"<<endl;
      cin>>s5;
      switch (s5) {

      case 1:
        cout<<"Enter first value: ";
        cin>>a;
        cout<<"Enter second value: ";
        cin>>b;
        result=pow(a,b);
        cout<<"Your result is: "<<result<<endl;
        break;

      case 2:
        cout<<"Enter a number: ";
        cin>>a;
        result=sqrt(a);
        cout<<"Your result is: "<<result<<endl;
        break;
      }
      break;

    case 5:{
      cout<< "Are you sure you want to leave this program? Press Y to stay or else press any key to leave " << endl;
      break;
      }
      break;
    }
    cout<< "Press Y to continue or else press any key to leave program:";
    cin>>a;
  }while (exit == 'y');
}

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]


Рейтинг:
2

Jochen Arndt

Как уже упоминалось вы должны инициализировать exit со значением.

Но вы никогда не устанавливаете переменную в другом месте вашего кода. Вместо этого вы читаете пользовательский ввод в конце страницы. wile петля в петлю a переменная. Так что вам придется изменить и это тоже:

char exit = 'y';

// ...

    case 5: //{
        // This is useless here because you will print a similar message below.
        //cout<< "Are you sure you want to leave this program? Press Y to stay or else press any key to leave " << endl;
        //break;
        //}
        break;
    }
    cout<< "Press Y to continue or else press any key to leave program:";
    // You have to assign the input to exit here instead:
    //cin>>a;
    cin >> exit;
}
// The user might also enter an uppercase 'Y'!
while (exit == 'y' || exit == 'Y');

Наконец, вы должны переименовать эту переменную, потому что существует стандартная библиотечная функция C/C++ с тем же именем. Использование переменной с тем же именем, что и существующая функция, не является ошибкой. Но это плохой стиль и может привести к неисправленному поведению, когда вы забываете скобки при вызове функции.