Попробуйте использовать scanf()
для чтения (ограничение количества символов для чтения) и strnlen()
для проверки размера строки:
char buf[10] = {0}; // Adding a little extra
do
{
printf("Enter a phone number# ");
scanf("%10s", buf);
if(strnlen(buf, 10) != 7)
{
printf("Invalid phone number size provided!\n"); // Do some special error handling
}
}while(strnlen(buf, ) != 7);
printf("I got a phone number now!\n");
Обратите внимание, вы можете попробовать протестировать другие случаи ошибок, например, сочетание букв и цифр, символов и т. Д.
Ранее я отвечал на это для пользователей C ++ (не знаю, о чем я думал,мой плохой ...) но думаю стоит рассмотреть варианты.В этом случае рассматривается ввод данных как std::string
;это метод size()
.Например, у вас может быть что-то вроде этого:
std::string phoneInput = "";
do
{
std::cout << "Enter phone number# " << std::endl;
std::cin >> phoneInput;
if(phoneInput.size() != 7)
{
std::cout << "Invalid phone number, please try again!" << std::endl;
}
}
while(phoneInput.size() != 7);
Ключевое отличие здесь состоит в том, что строковая библиотека C ++ динамически выделяет и изменяет размер строки, поэтому нет необходимости беспокоиться о возможных переполнениях памяти.В C, однако, если мы не будем внимательно проверять размер ввода, scanf()
может легко переполнить сам буфер (без строки безопасности).