Я предлагаю пользователю ввести длину массива, инициализируя массив 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
не читает новую строку после номера.
Это можно решить двумя способами:
getchar
для его чтения scanf
(например, scanf("%d ", ...)
) Вы можете использовать getchar
в цикле, чтобы очистить stdin перед чтением следующего символа.
while((target = getchar()) != '\n' && target != EOF)