Как проверить номер телефона в программировании на С - PullRequest
0 голосов
/ 30 марта 2019

Я пытаюсь проверить 7-значный номер программы C.С чего мне начать, например, если введено менее 7 цифр или введено более 7, попросите повторно ввести действительную 7 цифру

Ответы [ 2 ]

1 голос
/ 30 марта 2019

Попробуйте использовать 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() может легко переполнить сам буфер (без строки безопасности).

0 голосов
/ 30 марта 2019

Шаг 1, прочитайте строку ввода

char buffer[100];
if (fgets(buffer, sizeof buffer, stdin)) {

2: разобрать. Используйте "%n", чтобы отметить смещение места сканирования. "%8[0-9]" для поиска до 7 + 1 цифр.

  int n;
  n = 0;
  char number[9];
  sscanf(buffer, " %8[0-9] %n", number, &n);
  if (n == 0) return fail; // no digits
  if (buf[n]) return fail; // junk after the digits
  if (strlen(buf) != 7) return fail; // not 7 digits
  Success();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...