проверка сканфа C - PullRequest
       0

проверка сканфа C

2 голосов
/ 12 мая 2011

будет ли это фактически подтверждать, что мои пользовательские данные содержат только два элемента, а затем символ новой строки?

char newline
scanf(" %s %s%c", out, in, &newline);
if(newline != '\n'){
  error();
}

Ответы [ 3 ]

3 голосов
/ 12 мая 2011

Вы должны проверить статус возврата с scanf(); если он не возвращает 3, вы не прошли проверку. Ваши проверки обеспечат наличие двух «слов» (возможно, с предшествующим пробелом). Вам не будет позволено завершать пробел после второго слова. Обратите внимание, что вам может понадобиться «съесть» оставшуюся часть строки, если проверка не пройдена - вы этого не сделаете, если у вас есть новая строка в newline.

1 голос
/ 12 мая 2011

Да, это будет работать. Но только если входные данные точно совпадают: word word<enter>.

Если пользователь вводит что-то отличное от этого формата, например, пробел между 2-м словом и , введите , ваша логика не удастся.

char newline;
char out[50];
char in[50];
scanf("%s %s%c", out, in, &newline);
if(newline != '\n')
{
  printf("error!");
}

Кроме того, scanf не следует использовать для чтения с такого ввода. Попробуйте использовать fgets для чтения ввода и strtok для анализа данных.

1 голос
/ 12 мая 2011

Нет! scanf будет работать некорректно, если между второй строкой и новой строкой есть какой-либо символ пробела. используйте getc() для этого:

scanf("%s%s", buf1, buf2);
char newline = 0;
while((newline = getc()) == ' '  || newline == '\t');
if(newline != '\n'){
  error();
}

Редактировать:

Добавление регистра для конечных пробелов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...