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]
。如果你想直接检测按键,那么你将需要不同的方法。标准库中没有好的函数可以执行此操作,但这里有一个答案,为您提供了两种选择。
我正在尝试添加另一个语句以使用逻辑 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]
。如果你想直接检测按键,那么你将需要不同的方法。标准库中没有好的函数可以执行此操作,但这里有一个答案,为您提供了两种选择。