Почему я не могу использовать символы в переключателях? - PullRequest
0 голосов
/ 09 апреля 2020

Я должен сделать калькулятор, который будет основываться на вводе пользователя, выполнить операцию c. Сначала ввод должен быть своего рода оператором (+, -, * и т. Д. c.), А после кода проверять, какой из них является пользователем choice. Я объявил эти операторы как char, но мой редактор кода говорит, что я не могу поместить char переменные в качестве операторов case ... Что мне делать? Код:

#include <stdio.h>
#include <math.h>

int main(){
char choice = "+", "*", "-", "/";
int a, b;
float outcome;

scanf("%c", &choice);

switch (choice)
{
    case "+":
        scanf("d% d%", &a, &b);
        outcome = a + b;
        printf("%.1f", outcome);
        break;
    case "*":
        scanf("%d %d", &a, &b);
        outcome = a * b;
        printf("%.1f", outcome); 
        break;
    case "-":
        scanf("%d %d", &a, &b);
        outcome = a - b;
        printf("%.1f", outcome);
        break;
    case "/":
        scanf("%d %d", &a, &b);
        outcome = a / b;
        printf("%.1f", outcome);
        break;

   }

return 0;
}

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Вы можете использовать char s в switch, но "+", а другие являются строковыми литералами, а не символьными, то есть '+'.

В вашем коде есть другие проблемы. Например, не ясно, что вы ожидаете от этого (уже исправлены кавычки):

char choice = '+', '*', '-', '/';

A char - это один символ.

Ваш код выглядит как C но не как C ++. Если вы на самом деле используете C ++, вы можете использовать std::string и его метод find, например, так:

#include <string>
#include <iostream>

int main(){
    std::string choices = "+*-/";

    auto choice = choices.find('*');

    switch (choice){
        case 0: std::cout << "you chose +";break;
        case 1: std::cout << "you chose *";break;
        case 2: std::cout << "you chose -";break;
        case 3: std::cout << "you chose /";break;
        default: std::cout << "invalid operator";
    }
}
0 голосов
/ 09 апреля 2020

Это не символы, это строковые литералы.

Используйте «+» вместо «+».

...