Обычный способ проверки ввода состоит в том, чтобы прочитать входные данные в виде строки в программе, а затем проверить ее и преобразовать в ожидаемый тип.
Для имен не так много полезной проверки, которую вы можете сделать. Вы можете (и должны) проверить, что ввод не превышает ваши ожидания, но в остальном большинство входных данных следует рассматривать как действительное имя.
Для возраста, вы можете сделать гораздо больше проверок. Во-первых, входное значение должно быть допустимым целым числом, а во-вторых, оно должно находиться в определенном диапазоне.
Вы можете использовать следующие функции:
char* readString(char* buffer, size_t buflen)
{
char* result;
result = fgets(buffer, buflen, stdin);
if ((result != NULL) &&
(strlen(result) == buflen-1) &&
(result[buflen-2] != '\n'))
{
/* too long a line */
/* read the remainder of the line, to clear the input buffers */
while ((result != NULL) && (result[strlen(result)-1] != '\n'))
{
result = fgets(buffer, buflen, stdin);
}
/* set result to NULL to indicate an error */
result = NULL;
}
if (result != NULL)
{
/* strip the newline */
result[strlen(result)-1] = '\0';
}
}
bool readInt(int low, int high, int* value)
{
char temp[80];
if (readString(temp, 80))
{
char* endp;
long result = strtol(temp, &endp, 10);
if ((*endp == '\0') && (result >= low) && (result <= high))
{
*value = result;
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}