Для scanf (), почему отменяется scanset & quot;% [^ \ n] & quot; показывает правильный вывод для «\ n», но не для набора сканирования «% [aeiou]» для «эгиды»?

В следующей программе, если я использую строку для отмененного набора сканирования, она будет работать нормально, если я введу строку из нескольких слов (оканчивающуюся на ENTER или новую строку), даже если новая строка находится в списке с отрицанием.

Но если я вместо этого использую строку для набора сканирования и ввожу слово «эгида» (или любое слово с согласными в этом отношении), то выводятся ненужные символы. По аналогии с первым случаем, если я введу это слово, по крайней мере, «ae» не должно быть выведено? Пожалуйста, объясните это поведение набора сканирования и отрицательного набора для зсапЕ ().

#include <stdio.h>

int main ()
{
char str[30];
printf("Enter the string\n");
//scanf("%[^\n]",str);
//scanf("%[aeiou]",str);
printf("%s",str);
}

0

Решение

Это потому, что код ошибочно не проверяет возвращаемое значение scanf()

printf("Enter the string\n");
scanf("%[^\n]",str);
scanf("%[aeiou]",str);  // check result before using `str`
printf("%s",str);

С scanf("%[^\n]",str); и ввод, как "123\n", str получить значения "123" а также '\n' остается в stdin. Затем с scanf("%[aeiou]",str); и ввод, как "aegis\n"первая строка '\n' блоки, сохраняющие что-либо как '\n' не гласная, ничего не сохраняется в str и так как код не проверял возвращаемое значение scanf(), не понял, что str может быть недействительным

1) Всегда проверяйте возвращаемое значение scanf() и семья.

if (scanf(some_format, var1, var2, ...) != ExpectedConversionCount) {
Fail();
}

2) scanf("%[^\n]",str); не может прочитать строку 3 вещи: нет предела ввода, не может прочитать что-либо, если строка состоит только из '\n', Без проверки возвращаемого значения, EOF не обнаружен

3) Использование fgets() вместо scanf() для ввода пользователя.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]