Если выходит default то помимо "error" еще появляются какие то цифры
struct param
{
bool var = true;
double S, V, T;
char op;
};
void calculate(param& par)
{
switch (par.op)
{
case 'V':
std::cout << "input (S)=";
std::cin >> par.S;
std::cout << "input (T)=";
std::cin >> par.T;
par.V = par.S / par.T;
break;
case 'S':
std::cout << "input (V)=";
std::cin >> par.V;
std::cout << "input (T)=";
std::cin >> par.T;
par.S = par.V * par.T;
break;
case 'T':
std::cout << "input (S)=";
std::cin >> par.S;
std::cout << "input (V)=";
std::cin >> par.V;
par.T = par.S / par.V;
break;
default:
std::cout << "error\n";
break;
}
return;
}
int main()
{
while (true)
{
param p;
std::cout << "Chto ichem? (S,V,T): ";
std::cin >> p.op;
calculate(p);
std::cout << "V=" << p.V << "\n";
std::cout << "S=" << p.S << "\n";
std::cout << "T=" << p.T << "\n";
system("pause");
return 0;}}**```
Вот что выдает консоль если происходит default
Chto ichem? (S,V,T): s
error
V=6.12641e-322
S=2.07384e-317
T=0
sh: 1: pause: not found
Ответы (2 шт):
Цифры выводятся из за того, что у Вас в main есть строки:
std::cout << "V=" << p.V << "\n";
std::cout << "S=" << p.S << "\n";
std::cout << "T=" << p.T << "\n";
И они выполняются независимо от того, что ввёл пользователь. И ещё, зачем нужен бесконечный цикл while(true)?
P.S я не рассматривал Ваш код, так что while (true), возможно нужен)
цикл не нужен, добавил так как в задание братика было использовать цикл, хотел как то задействовать "можно было вернуться к выбору после первого раза, а не по новой запускать" но столкнулся с проблемой еще до этого. не подскажете как можно это исправить?
Я перевёл вашу функцию в формат bool, чтобы можно было отследить была ли вызвана ошибка. И если она выла вызвана - вывод цифр не происходит. Поменял std::cout << "Chto ichem? (S,V,T): "; на русский аналог (просто не люблю транслит). Чтобы в консоль не выводились "крякозябры" добавил setlocale(LC_ALL,""); . Также вам нужно сделать: правка -> выбрать кодировку -> widows1251 -> перезагрузить и сохранить в этой кодировке. Добавил возможность повторения программы без перезапуска через отслеживание клавиш с помощью _getch(); Вроде и всё
#include <iostream>
#include <conio.h>
struct param
{
bool var = true;
double S, V, T;
char op;
};
bool calculate(param& par, bool last)
{
switch (par.op)
{
case 'V':
std::cout << "input (S)=";
std::cin >> par.S;
std::cout << "input (T)=";
std::cin >> par.T;
par.V = par.S / par.T;
break;
case 'S':
std::cout << "input (V)=";
std::cin >> par.V;
std::cout << "input (T)=";
std::cin >> par.T;
par.S = par.V * par.T;
break;
case 'T':
std::cout << "input (S)=";
std::cin >> par.S;
std::cout << "input (V)=";
std::cin >> par.V;
par.T = par.S / par.V;
break;
default:
std::cout << "error\n";
last = false;
break;
}
return last;
}
int main()
{
bool last = true;
setlocale(LC_ALL,"");
int key = 121;
while (key!=110)
{
system("cls");
param p;
std::cout << "Что ищем? (S,V,T): ";
std::cin >> p.op;
last = calculate(p, last);
if (last){
std::cout << "V=" << p.V << "\n";
std::cout << "S=" << p.S << "\n";
std::cout << "T=" << p.T << "\n";
}
last = true;
std::cout << "Хотите повторить?(y/n)";
key = _getch();
}
std::cout << std::endl;
system("pause");
return 0;
}