В противном случае, если операторы не могут быть скомпилированы - «ошибка: ожидается ';' перед токеном '{'"

Я новенький. Пожалуйста извините меня. При компиляции следующего кода, состоящего исключительно из операторов 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(menu == 4) - что вы хотите здесь выразить?
3CxEZiVlQ 28.07.2024 20:23

Я пытаюсь запустить блок кода после «else», когда меню = 4, но код не скомпилируется с ошибкой в ​​этой строке.

Boomer 28.07.2024 20:26

если есть условия; другие нет. Если вам нужен тест, вам нужен if, если все остальные параметры были проверены и вам не нужно проверять условие, то вам не нужна ни проверка if, ни проверка условия, но вы можете оставить комментарий для документации. целей.

Avi Berger 28.07.2024 20:29

Ответ ниже уже решил вашу проблему (не забудьте принять ответ), но я хочу добавить: первые 4 строки в каждом блоке if одинаковы, вы можете извлечь их и записать только один раз выше. (возможно, то же самое для cout << sum, в зависимости от обработки ошибок)

Soraphis 28.07.2024 20:31

Вы могли бы удалить 90% этого кода и все равно показать проблему. И после того, как вы удалили его, вы, возможно, сами увидели проблему. Начните с упрощения; если это не поможет, опубликуйте упрощенный код.

Pete Becker 28.07.2024 20:34

Вы отредактировали код, но снова совершаете ту же ошибку. Либо удалите (menu == 2), либо замените else на else if, в зависимости от того, что вы хотите (действителен ввод 3 и выше или нет)

Lex W. 28.07.2024 20:41

@LexW. Редактирование сохраняет вопрос. Редактирование сообщения с вопросом, состоящее из исправленного кода, уничтожит его как вопрос, и его придется откатить.

Avi Berger 28.07.2024 21:19

@Avi, я согласен, но редактирование в его нынешнем виде более или менее делает недействительным мой ответ и предыдущие комментарии. Неисправное состояние теперь menu == 2 вместо menu == 4.

Lex W. 28.07.2024 21:26

@LexW. Согласен, редактирование делал не я. Хотя это было сделано добросовестно, чтобы избавиться от лишнего жира, который я мог бы срезать, прежде чем публиковать свой вопрос.

Boomer 28.07.2024 21:34
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
9
84
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Удалите «(menu == 4)» после последнего else.

Спасибо! Это была глупая ошибка с моей стороны

Boomer 28.07.2024 20:27

Не нужно говорить спасибо, вместо этого отметьте ответ как принятый.

Lex W. 28.07.2024 20:29

Если кто-то наберет 5, последний блок все равно будет выполнен. Это зависит от того, хотите ли вы, чтобы это произошло или нет.

drescherjm 28.07.2024 20:31

Этот ответ исправляет синтаксическую ошибку, но, вероятно, это не та логика, которую хочет ОП в случае недопустимого ввода, верно?

G.M. 28.07.2024 20:33
Ответ принят как подходящий

Чтобы проверить другое состояние, вам понадобится elseif:

if (menu == 1) 
{
  // do stuff for 1
}
else if (menu == 2)
{
  // do stuff for 2
}
else
{
  // if neither 1 nor 2
}

В этом конкретном случае вам будет лучше использовать конструкцию switchcase:

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;

    ...
  }

Обратите внимание на использование перечисления, чтобы упростить чтение (и поддержку) кода.

Спасибо за конструктив, этот ответ мне очень помог.

Boomer 30.07.2024 21:18

Другие вопросы по теме

Почему алгоритмы STL без ранжирования не ограничены концепциями C++20?
Могу ли я написать библиотеку для предварительной загрузки на C++? Есть ли что-нибудь, что мне нужно сделать, кроме добавления `extern "C"` к функциям для перехвата?
Почему clang думает, что у меня есть конструктор копирования?
Почему типы выходят из пространства имен при включении после заголовка вектора?
Инициализация вектора с помощью класса, который имеет параметр конструктора передачи по ссылке и сохраняет эту ссылку как член
Как я могу использовать VSCode с CMake и иметь разные цели, каждая из которых имеет разную архитектуру и набор инструментов?
Неточные вычисления последовательности Фибоначчи во время компиляции в рекурсивной лямбда-выражении
Синхронизируйте три потока в C++ один за другим
Явные удаленные конструкторы – имеет ли это значение?
Сопрограмма, ожидаемая в списке параметров, нарушает другой параметр?