Несколько операторов while loop - PullRequest
       59

Несколько операторов while loop

1 голос
/ 23 сентября 2019

Я пытаюсь поместить другой оператор для завершения цикла while с помощью логического AND:

while ( (character != '\n') && ( i < 10 ) )

... лишние +10: th буквы не сохраняются в массиве. Но Я все еще могу вводить ввод, пока не нажму ENTER / '\ n'.

Что я делаю не так?Что происходит с «дополнительным вводом»?

Это код:

char character;
char buffer[81];
int i = 0;

do
{
    character = getchar();
    buffer[i] = character;
    ++i;
} while ( (character != '\n') && (i < 10) );

buffer[i-1] = '\0';

Ответы [ 2 ]

7 голосов
/ 23 сентября 2019

Функция getchar не читает напрямую с клавиатуры.Это читает от stdin.И в большинстве случаев то, что вы написали на клавиатуре, не будет отображаться в stdin, пока вы не нажмете ввод.Это поведение находится вне вашего контроля и определяется терминалом, который вы используете.

Таким образом, ваш код в основном работает, за исключением того, что вы должны изменить buffer[i-1] на buffer[i].Если вы хотите напрямую определять нажатия клавиш, вам понадобятся разные методы.В стандартной библиотеке нет хороших функций для этого, но вот ответ, который дает вам два варианта.https://stackoverflow.com/a/20349652/6699433

2 голосов
/ 23 сентября 2019

Когда цикл do-while останавливается, i становится 10 в вашем случае.Допустим, ваш вклад был 0123456789.Ввод не содержит \n, поэтому buffer[9] становится '9'.Теперь, после этого вы присваиваете buffer[i - 1] для \0 и buffer[9] становится \0.

Вы хотите buffer[i] = '\0'.Также не забудьте проверить, что i не пересекает размер буфера.

...