while循环的几个语句

Several statements while loop

我正在尝试添加另一个语句以使用逻辑 AND 结束 while 循环:

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

...额外的 +10:th 字母不会存储在数组中。 但是在按下 ENTER / '\n' 之前我仍然可以输入。

我做错了什么? 'extra input' 会怎样?

这是代码:

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

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

buffer[i-1] = '[=11=]';

当 do-while 循环停止时,i 在您的情况下变为 10。假设您的输入是 0123456789。输入不包含 \n,因此 buffer[9] 变为 '9'。现在,之后您将 buffer[i - 1] 分配给 [=16=] 并且 buffer[9] 变为 [=16=].

你想要buffer[i] = '[=19=]'。另外,不要忘记检查 i 没有超过缓冲区大小。

函数getchar不直接从键盘读取。它从 stdin 读取。在大多数情况下,您在键盘上输入的内容不会以 stdin 结束,直到您按下回车键。此行为不在您的控制范围内,由您使用的终端决定。

所以你的代码基本上可以工作,只是你应该将 buffer[i-1] 更改为 buffer[i]。如果你想直接检测按键,那么你将需要不同的方法。标准库中没有好的函数可以执行此操作,但这里有一个答案,为您提供了两种选择。