Я пытался использовать isdigit
и isspace
одновременно, но он не проверял бы и то и другое одновременно.
Если бы я набрал "123", "123" или "ab c "или" ab c ", это не вернет ошибку для проверки.
Я хочу убедиться, что пользователь вводит только целые числа.
И символы, кроме целые числа, такие как алфавиты, пробелы и знаки препинания, будут отклонены.
typedef struct
{
int rack, level_no;
}LOCATION;
typedef struct
{
int year_published, quantity;
char isbn_code[15];
char author[55];
char title[105];
char publisher[55];
double price;
LOCATION loc;
}DATA;
int add_record()
{
DATA books[50];
bool valid = true;
system("CLS");
cout << "\t\t\t\t\t\t\t\t\t : :Add Book Record: :\n\n";
ifstream infile("books.txt", ios::app);
if (infile.is_open() && !infile.eof())
{
do
{
cout << "ISBN Code: ";
cin >> books->isbn_code[13];
cin.ignore(numeric_limits<streamsize>::max(), '\n');
if(!isdigit(books->isbn_code[13]) && isspace(books->isbn_code[13]))
{
cout << "Your input is invalid. Please enter again.\n";
cout << "ISBN Code: ";
cin >> books->isbn_code[13];
valid = false;
}
else
valid = true;
} while (valid == true);
}
return 0;
}