Как проверить действительные ожидаемые значения с помощью таблицы 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 шт):

Автор решения: AlexGlebe

Вы почти всё дописали. Осталось просто вывести на экран. Я чуток подправил предупреждения компилятора.

// 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";

}
→ Ссылка
Автор решения: Drawn Raccoon
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;
        }
    }
    // ...
}
→ Ссылка
Автор решения: Arnold-Baba

Вам нужно проверить, работает ли калькулятор.

#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';
}
→ Ссылка