Intereting Posts
kill – небезопасное отношение к сигналам – любая альтернатива? dreferencing 2 d array Неявные декларации функций иногда работают в C? Ссылка на массив по отношению к указателю на массив Написание моей первой программы на C, и я не могу пройти мимо этой немой ошибки Десятичное значение для двоичного Ассоциация SCTP Ошибка умножения матрицы Pthreads C – fscanf in while цикл пропускает ввод пользователя Каково значение по умолчанию символа в неинициализированном массиве, в C? Строгое нарушение псевдонима или нарушение выравнивания с помощью структуры с гибким элементом массива? Как gcc вычисляет необходимое пространство для структуры? Чтение начального адреса и длины (карта виртуальной памяти) процесса Почему я получаю сообщение об отказе C malloc? Получение значений RGB для каждого пикселя из растрового изображения 24bpp для преобразования в формат GBA в C

Почему getchar () читает ‘\ n’ после инструкции printf?

Я предлагаю пользователю ввести длину массива, инициализируя массив char [] с этим вводом, а затем предложив пользователю ввести сообщение для ввода в массив char [].

Я читаю первый символ сообщения пользователя с помощью getchar() .

Тем не менее, getchar() считывает escape-строку новой строки '\n' перед чтением любого пользовательского ввода. Кажется, что он получает '\n' из предыдущего выражения printf которое запрашивает пользователя …

Вот соответствующий код:

 #include  int main(void) { int len = 0, originalLen = 0; printf("\n\nWhat is the length of the array? "); scanf("%d", &originalLen); char str[originalLen]; // intitializing the array printf("Enter a message to enter into the array: "); char target = getchar(); str[len] = target; // why is getchar() reading '\n'? if (target == '\n') { printf("\n...what happened?\n"); } return 0; } // end of main 

Когда вы вводите номер и нажимаете клавишу ENTER, число и символ помещаются во входной буфер, а именно:

  • Введенный номер и
  • Символ новой строки ( \n ).

Число потребляется scanf но scanf новой строки остается во входном буфере, который считывается с помощью getchar() .

Вы должны использовать \n перед вызовом getchar() , используя:

 scanf("%d ", &originalLen); ^^^ 

Это говорит scanf чтобы прочитать номер и дополнительный символ, который является \n .

Это связано с тем, что предыдущий scanf не читает новую строку после номера.

Это можно решить двумя способами:

  1. Используйте, например, getchar для его чтения
  2. Добавьте пробел после формата scanf (например, scanf("%d ", ...) )

Вы можете использовать getchar в цикле, чтобы очистить stdin перед чтением следующего символа.

 while((target = getchar()) != '\n' && target != EOF)