Почему возвращаемое значение для scanf пропущено? как это исправить?

#include <stdio.h>

int main()
{
    int N, control = 0;//N -  длина слов,которую задаёт пользователь, контрол служебная переменная для выхода из цикла
    char arr[1000];//массив
    char a;//переменная для заполнения массива
    int i = 0, j;//служебные переменные-счётчики
    printf("Input a string:\n");
    while ((a = getchar()) != '\n')//  ввод массива. "До тех пор пока вводимы символ не равен '\n', заполняем массив"
    {
        arr[i] = a;
        i++;
    }
    arr[i] = '\0';// '\0' обозначение конца строки
    printf("Input a word size:\n");
    
    scanf("%d", &N);// ввод длины слов
    if (N < 0) {
        printf("Error");
    }
    i = 0;//с помощбю i заполняли строку, текущее ее значение - длинна строки. Нужно пойти с начала, поэтому обнуляем ее
    while (1)// бесконечный цикл, потому что мы не знаем заранее сколько раз нужно будет прогнать действия внутри него. Для выхода из него используется control.
    {
        int m = 0;// локальная(!) переменная для проверки длины ТЕКУЩЕГО слова в строке; обнуляем ее каждый раз перед считыванием слов.
        while ((arr[i] >= 'A' && arr[i] <= 'Z') || (arr[i] >= 'a' && arr[i] <= 'z'))// цикл работает до тех пор, пока в строке идет буква. Если в строке будет символ, цикл остановится
        {
            //за слово мы считаем последовательность букв, поэтому пока буквы идут подряд мы запоминаем их длину в m!
            i++;
            m++;
        }
        if (m == N)// это условие запустится, если предыдущий цикл встретил НЕ букву(разделитель), и теперь мы сравниваем длину последовательности букв, с заданной длиной слова
        {
            // если они равны, то выводим это слово
            for (j = i - m; j < i; j++)//длина слова m, мы находимся на i и i одновременно конец слова. Значит запускаем цикл от i - m до i
            {
                printf("%c", arr[j]);
            }
            printf(" ");//делаем разделение между выводимыми словами
        }
        while (!((arr[i] >= 'A' && arr[i] <= 'Z') || (arr[i] >= 'a' && arr[i] <= 'z')))//пропускаем все НЕ буквы после полученного слова
        {
            if (arr[i] == '\0')// если мы наткнулись на конец строки, то нужно заканчивать, та как слов больше нет. Изменяем переменную control,чтобы выйти из цикла.
            {
                control = 1;
                break;
            }
            i++;
        }
        if (control == 1)//если control изменена - значит строка закончилась и тогда выходим из бесконечного цикла.
            break;
    }
    return 0;
}

введите сюда описание изображения


Ответы (0 шт):