getchar()循环不';不要无缘无故地结束

getchar()循环不';不要无缘无故地结束,c,string,infinite-loop,getchar,C,String,Infinite Loop,Getchar,我有以下代码片段: char key[32]; for (int i = 0; i < 32; i++) { key[i] = getchar(); } char键[32]; 对于(int i=0;i

我有以下代码片段:

char key[32];
for (int i = 0; i < 32; i++)
{
    key[i] = getchar();
}
char键[32];
对于(int i=0;i<32;i++)
{
key[i]=getchar();
}
它显然应该接受
32个
字符,然后停止

问题在于,它不会在
i=32时停止,而是一直持续到(出于某种未知原因)我按下enter键为止

你能解释一下为什么会发生这种情况吗

一直持续到(不知什么原因)我按下回车键

是的,这很正常。例如,见:

计算机程序的输入通常经过几个阶段。在最低级别上,操作系统中与设备相关的例程处理与特定设备(如键盘、串行线、磁盘驱动器等)接口的细节。除此之外,现代操作系统倾向于具有独立于设备的I/O层,统一对任何文件或设备的访问。最后,C程序通常通过stdio库的可移植功能与操作系统的I/O设施隔离

在某种程度上,交互键盘输入通常一次收集一行,并呈现给请求程序。这使操作系统有机会以一致的方式支持输入行编辑(backspace/delete/rubout等),而无需将其内置到每个程序中。只有当用户满意并按下返回键(或等效键)时,呼叫程序才能使用该线路。即使调用程序一次似乎在读取输入字符(使用
getchar
等),第一次调用也会阻塞,直到用户键入整行,此时可能有许多字符可用,并且许多字符请求(例如
getchar
调用)会快速连续地得到满足

一直持续到(不知什么原因)我按下回车键

是的,这很正常。例如,见:

计算机程序的输入通常经过几个阶段。在最低级别上,操作系统中与设备相关的例程处理与特定设备(如键盘、串行线、磁盘驱动器等)接口的细节。除此之外,现代操作系统倾向于具有独立于设备的I/O层,统一对任何文件或设备的访问。最后,C程序通常通过stdio库的可移植功能与操作系统的I/O设施隔离

在某种程度上,交互键盘输入通常一次收集一行,并呈现给请求程序。这使操作系统有机会以一致的方式支持输入行编辑(backspace/delete/rubout等),而无需将其内置到每个程序中。只有当用户满意并按下返回键(或等效键)时,呼叫程序才能使用该线路。即使调用程序一次似乎在读取输入字符(使用
getchar
等),第一次调用也会阻塞,直到用户键入整行,此时可能有许多字符可用,并且许多字符请求(例如
getchar
调用)会快速连续地得到满足


需要更多。您如何验证它没有停止在
i=32
?需要更多。您如何验证它没有停止在
i=32