Как распечатать неверный ввод в сообщении об ошибке? C ++ - PullRequest
0 голосов
/ 21 апреля 2020

Идея состоит в том, чтобы вызвать единственную функцию, чтобы проверить пользовательский ввод и вернуть True || False.

Пользовательский ввод с 0123456789 должен возвращать

Правильно введенный номер

Пользовательский ввод с 0123w456789 должен возвращать

Число не допускается или содержит недопустимый ввод, такой как "w"

Пользовательский ввод с 0123wx456789 должен возвращать

Номер недопустим или содержит недопустимый ввод, такой как "wx "

Мой код:

#include <iostream>
using namespace std;
int main ( )
{
    string i_numvalidation;
    cout << "Enter the number: " << '\n';
    cin >> i_numvalidation;

    bool isNumber = true;
    for (int i = 0; i < i_numvalidation.length();  i++)
    {
        if (!(i_numvalidation[i] >= '0' && i_numvalidation [i] <= '9'))
        {
            isNumber = false;
        }
    }
    if (isNumber)
        cout << " Entered number " << i_numvalidation << " is correct" << '\n';
    else
        cout << " Entered number " << i_numvalidation << " is not allowed or Contains invalid input such as " << "'\n";
}

Вопрос обновлен, чтобы его было понятно.

Ответы [ 3 ]

0 голосов
/ 21 апреля 2020

Реализованные мной функции работают для одного значения, но по-прежнему не выводят полные недопустимые символы. Если входное значение 0123ab456789, оно выведет сообщение об ошибке с «a» вместо «ab». Должно быть напечатано «ab», так как ввод содержит «ab».

Код:

#include <iostream>
using namespace std;

int main ( )
{
string i_numvalidation;
cout << "Enter the Number: " << '\n';
cin >> i_numvalidation;
bool isNumber = true;
int bad_index = 0 ;
if (i_numvalidation [0] == '0')
    isNumber = false;
for (int i = 0; i < i_numvalidation.length () && isNumber; i++ )
{
    if (!(i_numvalidation [i] >= '0' && i_numvalidation [i] <= '9'))
{
        isNumber = false;
        bad_index = i ;
        break;
}
    }
    if (isNumber)
        {
        cout << "  The Entered " << i_numvalidation << " number is correct" << '\n';
    }
    else
            cout << " The Entered " << i_numvalidation << " is not allowed or Contains invalid input such as '" << i_numvalidation [ bad_index ] << "'\n";

}
0 голосов
/ 21 апреля 2020

Как:

String err='1';
for(int i=0;i<i_numvalidation.length(); i++)
{
  if(i_numvalidation[i]!= '0' || i_numvalidation[i]!= '1' || i_numvalidation[i]!= '2' and so on...)
{
    err[err.length()]=i_numvalidation[i];
    isNumber=false;
}
}
if(!isNumber)
  cout<<"That's not a number bruh"<<err<<endl;

Извините, если я не помогу, я попытался ... Надеюсь, вы получите ответ.

0 голосов
/ 21 апреля 2020

У вас уже есть почти все, что вам нужно, чтобы получить желаемый результат. Вам нужно только запомнить символы, которые делают ввод недопустимым (ie те, для которых вы установили isNumber = false;), во второй строке и распечатать это вместо исходного ввода. На самом деле единственный компонент, который вы еще не используете в своем коде, - это добавление символа в строку, и это можно сделать так:

std::string x;
char invalid_character = 'w';
char other_invalid_character = 'p';
x += invalid_charater;
x += other_invalid_character;
std::cout << x; // prints wp
...