Итак, я пытался создать эту программу, которая будет содержать до 12 цифр от пользователя, используя строковые и строковые классы. Вопрос, который у меня есть, составляет:Проверка пользовательского ввода строки пользователя
- Игнорирует (-) знак.
- Игнорирование десятичной точки.
- Ошибка при вводе более 12 цифр.
- только принимающие цифры (т.е. без букв)
До сих пор это то, что у меня есть:
#include <iostream>
#include <string>
#include <cctype>
#include <iomanip>
using namespace std;
bool test(char [] , int);
int main()
{
const int SIZE= 13;
char number[SIZE];
int count;
cout<< "Please enter a number up to "<< (SIZE-1) <<" digits long." << endl;
cout<< "The number may be positive or negative" << endl;
cout<< "and may include fractions (up to two decimal positions)" << endl;
cout<< "Sign and decimal dot(.) are not included in the digit count:"<< "\t";
cin.getline (number, SIZE);
if (test(number, SIZE))
{
while (number[count]!='\0')
{
cout<< "The currency value is: \t $";
cout<< setprecision(2) << number[count];
count++;
}
}
else
{
cout << "Invalid number: contains non-numeric digits.";
}
return 0;
}
bool test(char testNum[], int size)
{
int count;
for (count = 0; count< size; count++)
{
if(!isdigit(testNum[count]))
return false;
}
return true;
}
Любая помощь очень высоко ценится, но самое главное для меня в данный момент является 4-й пункт. Независимо от того, что вводится, вывод «Недопустимый номер: ....», и я не уверен, почему это так.
Вы даже проверяете терминатор (null char) на 'isdigit()'. Тем не менее, почему вы используете исходный массив? Используйте строку 'std :: string,' и затем прочитайте эту строку с 'getline (std :: cin, line);' и начните проверку оттуда. –
Итак, чтобы не тестировать (нулевой символ), который я положил для (count
Посмотрите, сколько символов вы ввели и сколько вы проверили. –