свойства символов — существует ли специальный синтаксис для сравнения символов в C ++?

Я изучал C ++ и пытался создать базовое приложение для калькулятора. Цель состоит в том, чтобы получить два числа от 0 до 9 от пользователя и математическую операцию (+, -, *, /); если набирается какой-то другой символ, я хочу зациклить программу, чтобы запросить правильный ввод.

Но всякий раз, когда я запускаю программу, она не распознает цифры 0-9 и продолжает повторять цикл. Это основные 3 функции, которые я использую. Из основного я просто звоню им, поэтому сомневаюсь, что проблема есть. Помогите, пожалуйста?

О, и я знаю, что я никогда не должен использовать переход, но я хотел практиковать.
И если бы вы могли указать более эффективные способы написания этого кода, это здорово.
Бесконечно благодарен.

int GetUserInput(){
using namespace std;
cout << "Please enter a number between 0-9." << endl;

char inputChar;
cin >> inputChar;

while (inputChar != ('1' || '2' || '3' || '4' || '5' || '6' || '7' || '8' || '9' || '0')) {
cout << "Please enter a number between 0-9." << endl;
cin >> inputChar;
}

return static_cast <int> (inputChar);

}

char GetMathematicalOperation(){
using namespace std;
cout << "Please enter a mathematical operator (+, -, *, /)" << endl;

// Storing user input character into char inputChar
char inputChar;

inputloop:
cin >> inputChar;
switch(inputChar) {
case('+'):
case('-'):
case('*'):
case('/'):
break;
default:
cout << "Please enter a mathematical operator (+, -, *, /)" << endl;
goto inputloop;
}

return inputChar;

}

int CalculateResult(int x, char Operator, int y){
if (Operator = '+')
return x+y;
if (Operator = '-')
return x-y;
if (Operator = '*')
return x*y;
if (Operator = '/')
return x/y;
return 0;

}

0

Решение

|| Оператор должен работать с логическими выражениями, а не с символами. Вам нужно будет расширить его до while (inputChar != '1' && inputChar != '2' && ...,

В качестве альтернативы вы можете использовать тот факт, что коды символов цифр являются последовательными. Другими словами, вы могли бы сделать while (inputChar < '0' || inputChar > '9'),

Кроме того, в вашем CalculateResult функция, вам нужно изменить эти = в == — иначе вы перезаписываете Operator переменная, а не по сравнению с ней.

1

Другие решения

В C ++

('1' || '2' || '3' || '4' || '5' || '6' || '7' || '8' || '9' || '0') == true

Более конкретно, char что имеет значение, которое не является конкретно 0 (значение, а не символ) оценивается как true по сравнению с == или же != оператор.

Итак, ваше выражение

inputChar != ('1' || '2' || '3' || '4' || '5' || '6' || '7' || '8' || '9' || '0')

Эквивалентно

inputChar != true

Вы бы лучше поставить все эти chars в контейнер и проверьте, существует ли пользовательский ввод в контейнере.

Непроверенный код

char mychars[] = {'1','2','3','4','5','6','7','8','9','0'};
std::set<char> inputChars;
inputChars.insert(mychars, mychars+10);

if(inputChars.find(inputChar) != inputChars.end())
{
...
}
1

Вы также можете использовать isdigit сделать что-то вроде:

while(!isdigit(inputChar)) {
// code here
}
1

Вы хотите проверить, является ли inputChar находится вне диапазона от 0 до 9, поэтому вам нужно что-то вроде этого:

while (inputChar < '0' || inputChar > '9')
0

Ваше состояние неверно … вам нужно проверить (inputchar! = ‘0’) && (inputchar! = ‘1’) && … && (inputchar! = ‘9’)

0
while (inputChar != ('1' || '2' || '3' || '4' || '5' || '6' || '7' || '8' || '9' || '0'))

Вы должны сравнить с каждым персонажем.

while ((inputChar != '1') ||  (inputChar != '2') ....

Или просто —

while ((inputChar < 47) || (inputChar > 57))

Следующий,

if (Operator = '+')

Компилятор должен был дать вам предупреждение. Его назначение. Вам на самом деле нужно == вместо оператора, если вы собираетесь сделать сравнение.

0

Другое решение: if (std::string("0123456789").find(inputChar) != std::string::npos), Переменная npos — нет позиции — значит не найдено.

0