Другие языки программирования и технологии

пишу на с++ программу-тест, выбор правильно ответа цифрой, но если я нажимаю символ, то программа сразу вылетает

Помогите, в чем я не прав

#include
using namespace std;

int main()
{
int iChoice = 0;
float fRating = 0;

cout << "\t\tПрограмма-тест, оператора switch\n\n";

cout << "Сколько жизней у кошки?";
cout << "Ответы: \n";
cout << "-> 5 жизней\n-> 7 жизней\n-> 9 жизней";
cout << "\nВаш ответ: ";
cin >> iChoice;

switch(iChoice)
{
case 5:
fRating = 0;
break;
case 7:
fRating = 0;
break;
case 9:
fRating = 5;
break;
}

cout << "\nСколько сантиметров в метре? \n";
cout << "Ответы: \n";
cout << "-> 10 сантиметров\n-> 100 сантиметров\n-> 1000 сантиметров";
cout << "\nВаш ответ: ";
cin >> iChoice;

switch(iChoice)
{
case 10:
fRating = fRating + 0;
break;
case 100:
fRating = fRating + 5;
break;
case 1000:
fRating = fRating + 0;
break;
}

cout << "\nКакова скорость звука? \n";
cout << "Ответы: \n";
cout << "-> 330 м/с\n-> 320 м/с\n-> 230 м/с";
cout << "\nВаш ответ: ";
cin >> iChoice;

switch(iChoice)
{
case 330:
fRating = fRating + 5;
break;
case 320:
fRating = fRating + 0;
break;
case 230:
fRating = fRating + 0;
break;
}

cout << fRating << endl;
cout << "\nВы заработали = " << fRating/3 << " баллов!";

return 0;
}
BB
Black Bestia
394
В этом задании не логично использовать switch, так как верный ответ один и fRating = fRating + 0; ерунда.
Поправил твой код.
Сделал, если пишешь что - то кроме числа - требует ввести ещё раз, пока только одни цифры не будут в числе. Программа теперь не вылетает.

#include <iostream>
#include <windows.h>
#include <string>

using namespace std;

size_t input()
{
size_t output;
for (;;)
{
string s;
if (cin.rdbuf()->in_avail())
{
cin.ignore(cin.rdbuf()->in_avail(), '\n');
}
getline(cin, s);
int in = atoi(s.c_str());
string regress = to_string(in);
if (s == regress)
{
output = in;
break;
}
else
{
cout << "Ошибка. Повторите ввод" << endl;
}
}
return output;
}

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
system("color 0A");

int iChoice = 0;
float fRating = 0;

cout << "\t\tПрограмма-тест, оператора switch\n\n";

cout << "Сколько жизней у кошки? ";
cout << "Ответы: \n";
cout << "-> 5 жизней\n-> 7 жизней\n-> 9 жизней";
cout << "\nВаш ответ: ";
iChoice = input();

switch (iChoice)
{
case 5:
fRating += 0;
break;
case 7:
fRating += 0;
break;
case 9:
fRating += 5;
break;
default:
fRating += 0;
break;
}

cout << "\nСколько сантиметров в метре? \n";
cout << "Ответы: \n";
cout << "-> 10 сантиметров\n-> 100 сантиметров\n-> 1000 сантиметров";
cout << "\nВаш ответ: ";
iChoice = input();

switch (iChoice)
{
case 10:
fRating += 0;
break;
case 100:
fRating += 5;
break;
case 1000:
fRating += 0;
break;
default:
fRating += 0;
break;
}

cout << "\nКакова скорость звука? \n";
cout << "Ответы: \n";
cout << "-> 330 м/с\n-> 320 м/с\n-> 230 м/с";
cout << "\nВаш ответ: ";
iChoice = input();

switch (iChoice)
{
case 330:
fRating += 5;
break;
case 320:
fRating += 0;
break;
case 230:
fRating += 0;
break;
default:
fRating += 0;
break;
}

cout << fRating << endl;
cout << "\nВы заработали = " << fRating / 3. << " баллов! ";

system("pause");
return 0;
}
СА
Сухих Александр
8 552
Лучший ответ
у меня не вылетает, а сразу весь дальнейший текст программы показывает, делай так:

cout << "Сколько жизней у кошки?";
cout << "Ответы: \n";
cout << "-> 5 жизней\n-> 7 жизней\n-> 9 жизней";
cout << "\nВаш ответ: ";
cin >> iChoice;
if ((iChoice != 5) && (iChoice != 7) && (iChoice != 9))
{
cout << "Вы неправильно ввели ответ, запустите программу сначала и попробуйте еще раз";
system("pause");
}

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

Похожие вопросы