Как проверить действительные ожидаемые значения с помощью таблицы ASCII в C ++?
В настоящее время я пытаюсь получить правильные цифры только для пользовательского ввода и хочу, чтобы сообщение об ошибке указывало неправильное значение, если пользовательский ввод недопустим, но у меня возникла небольшая проблема с достижением цели. Вы можете проверить мой код, если это возможно сделать так, как я ожидаю от своего кода.
Когда пользовательский ввод 123456789, вывод должен быть:
Введенный номер 123456789 правильный
Когда пользовательский ввод 1234k1234, вывод должен быть:
Введенное вами число 1234k недопустимо и содержит недопустимый символ (k).
#include <iostream>
using namespace std;
void Welcome();
bool isNumber (string tmp);
int main ()
{
Beginning:
Welcome();
string tmp;
cout << "Введите число: " << '\n';
cin >> tmp;
if (isNumber (tmp) )
{
cout << " Введенный вами номер правильный" << '\n';
goto Beginning;
}
else
cout << " Введенный вами номер недействителен и содержит недопустимый символ" << '\n';
goto Beginning;
}
void Welcome()
{
cout << "Добро пожаловать в программу" << '\n';
}
bool isNumber (string tmp)
{
if (tmp [0] == '0')
return false;
for (int i = 0; i < tmp.length () && isNumber; i++ )
{
cout << tmp [i];
if (!(tmp [i] >= 48 && tmp [i] <= 57))
return false;
}
return true;
}
Ответы (3 шт):
Вы почти всё дописали. Осталось просто вывести на экран. Я чуток подправил предупреждения компилятора.
// g++ -Wall -std=c++11 printchar.cpp -o printchar
#include <iostream>
using namespace std;
// warning: ISO C++ forbids declaration of ‘main’ with no type
int main ( )
{
Beginning:
string tmp;
cout << "Введите число: " << '\n';
cin >> tmp;
bool isNumber = true;
unsigned int bad_index = 0 ;
if (tmp [0] == '0')
isNumber = false;
// warning: comparison between signed and unsigned integer expressions
for (unsigned int i = 0; i < tmp.length () && isNumber; i++ )
{
// в Си буквы и числа почти тоже самое. '0' равно 48
if (!(tmp [i] >= '0' && tmp [i] <= '9'))
{
isNumber = false;
bad_index = i ;
break;
}
}
if (isNumber)
{
cout << " Введенный вами номер " << tmp << " правильный" << '\n';
goto Beginning;
}
else
cout << " Введенный вами номер " << tmp << " недействителен и содержит недопустимый символ '" << tmp [ bad_index ] << "'\n";
}
int main() {
string s;
while (true) {
int pos = -1;
cin >> s;
if (s.empty()) {
cout << "Строка пустая" << endl;
} else if (s[0] == '0') {
cout << "Лидирующий 0" << endl;
} else if (!all_of(s.begin(), s.end(), [&pos](unsigned char c) { ++pos; return isdigit(c); })) {
cout << "Введенное вами число " << s.substr(0, pos + 1) << " недопустимо и содержит недопустимый символ (" << s[pos] << ")" << endl;
} else {
cout << "Введенный вами номер " << s << " правильный" << endl;
break;
}
}
// ...
}
Вам нужно проверить, работает ли калькулятор.
#include <iostream>
using namespace std;
int main()
{
string iNum;
cout << "Введите любой номер, чтобы запустить калькулятор! Латинские символы запрещены" << '\n';
cin >> iNum;
bool iNumvalidation = true;
int bad_inputValidation = 0;
if (iNum [0] == '0')
iNumvalidation = false;
for (int iNumvalidationVerify = 0; iNumvalidationVerify < iNum.length() && iNumvalidation; iNumvalidationVerify++)
{
if (!(iNum [iNumvalidationVerify] >='0' && iNum [iNumvalidationVerify] <= '9'))
{
iNumvalidation = false;
bad_inputValidation = iNumvalidationVerify;
break;
}
}
if (iNumvalidation)
{
cout << "---------------------" << '\n';
cout << "Калькулятор запущен" << '\n';
cout << "---------------------" << '\n';
int a,b;
cout << "Введите первое значение" << endl;
cin >> a;
cout << "Введите второе значение" << endl;
cin >> b;
cout << "Пожалуйста, выберите, что вы хотите сделать" << endl;
cout << " + " << endl;
cout << " - " << endl;
cout << " * " << endl;
cout << " / " << endl;
char desision;
cout << "Выберите решение: " << endl;
cin >> desision;
switch (desision)
{
case '+':
cout << "Сумма " << a << " + " << b << " = " << (a+b) << endl;
break;
case '-':
cout << "Вычитание " << a << " - " << b << " = " << (a-b) << endl;
break;
case '*':
cout << "Умножение " << a << " * " << b << " = " << (a*b) << endl;
break;
case '/':
if (b == !0)
cout << "Отдел " << a << " / " << b << " = " << (a/b) << endl;
else
cout << "Невозможно разделить на ноль, попробуйте еще раз" << endl;
return 0;
}
}
else
cout << "Неверный ввод: " << "[" << iNum [bad_inputValidation] << "]" << " не является числом и принадлежит [ABCD ...] и это не разрешено. Попробуйте еще раз" << '\n';
}