Я новенький. Пожалуйста извините меня. При компиляции следующего кода, состоящего исключительно из операторов if, последний оператор else не работает. Я получаю сообщение об ошибке, как указано в заголовке. Если я изменю последнее «else» на «else if», код запустится. Для меня это не имеет смысла, поскольку мне сказали, что последнее утверждение должно быть просто «иначе». Спасибо за любую помощь.
#include <iostream>
using namespace std;
int main() {
int menu, number1, number2;
double sum;
cout << "1: Addition\n2: Division\n\n";
cin >> menu;
if (menu == 1){ //Addition
cout << "gimme a num: ";
cin >> number1;
cout << "gib another: ";
cin >> number2;
sum = number1 + number2;
cout << sum;
}else(menu == 2){ //division !THIS IS THE LINE IN QUESTION!
cout << "gimme a num: ";
cin >> number1;
cout << "gib another: ";
cin >> number2;
sum = number1 / number2;
cout << sum;
}
return 0;
}
Я пытаюсь запустить блок кода после «else», когда меню = 4, но код не скомпилируется с ошибкой в этой строке.
если есть условия; другие нет. Если вам нужен тест, вам нужен if, если все остальные параметры были проверены и вам не нужно проверять условие, то вам не нужна ни проверка if, ни проверка условия, но вы можете оставить комментарий для документации. целей.
Ответ ниже уже решил вашу проблему (не забудьте принять ответ), но я хочу добавить: первые 4 строки в каждом блоке if одинаковы, вы можете извлечь их и записать только один раз выше. (возможно, то же самое для cout << sum
, в зависимости от обработки ошибок)
Вы могли бы удалить 90% этого кода и все равно показать проблему. И после того, как вы удалили его, вы, возможно, сами увидели проблему. Начните с упрощения; если это не поможет, опубликуйте упрощенный код.
Вы отредактировали код, но снова совершаете ту же ошибку. Либо удалите (menu == 2)
, либо замените else
на else if
, в зависимости от того, что вы хотите (действителен ввод 3 и выше или нет)
@LexW. Редактирование сохраняет вопрос. Редактирование сообщения с вопросом, состоящее из исправленного кода, уничтожит его как вопрос, и его придется откатить.
@Avi, я согласен, но редактирование в его нынешнем виде более или менее делает недействительным мой ответ и предыдущие комментарии. Неисправное состояние теперь menu == 2
вместо menu == 4
.
@LexW. Согласен, редактирование делал не я. Хотя это было сделано добросовестно, чтобы избавиться от лишнего жира, который я мог бы срезать, прежде чем публиковать свой вопрос.
Удалите «(menu == 4)» после последнего else.
Спасибо! Это была глупая ошибка с моей стороны
Не нужно говорить спасибо, вместо этого отметьте ответ как принятый.
Если кто-то наберет 5, последний блок все равно будет выполнен. Это зависит от того, хотите ли вы, чтобы это произошло или нет.
Этот ответ исправляет синтаксическую ошибку, но, вероятно, это не та логика, которую хочет ОП в случае недопустимого ввода, верно?
Чтобы проверить другое состояние, вам понадобится else
if
:
if (menu == 1)
{
// do stuff for 1
}
else if (menu == 2)
{
// do stuff for 2
}
else
{
// if neither 1 nor 2
}
В этом конкретном случае вам будет лучше использовать конструкцию switch
case
:
switch (menu)
{
case 1:
// do stuff for 1
break;
case 2:
// do stuff for 2
break;
default:
// if neither 1 nor 2
}
Кстати, поскольку это будет иметь значение по мере вашего продвижения вперед, рекомендуется всегда получать вводимые пользователем данные в виде строки текста, а затем анализировать их.
Ранее я написал здесь небольшой ответ «как получить пользовательский ввод», который может оказаться вам полезным: https://stackoverflow.com/a/78397016/2706707
Вы можете использовать эту методологию для построения своего меню:
switch (ask<int>( "1: addition\n2: division\n? " ))
{
case ...
Вы даже можете поместить все это в функцию:
enum OP { Addition = 1, Division };
OP menu()
{
return ask<int>(
"1: addition\n"
"2: division\n"
// other operations...?
"? " );
}
int main()
{
switch (menu())
{
case Addition:
...
break;
case Division:
...
break;
...
}
Обратите внимание на использование перечисления, чтобы упростить чтение (и поддержку) кода.
Спасибо за конструктив, этот ответ мне очень помог.
else(menu == 4)
- что вы хотите здесь выразить?