getchar()和enter按钮了解它是如何工作的

时间:2015-02-13 22:28:39

标签: c shell

我编写了以下函数(当我在C上阅读Ritchie书籍时)从命令行获取一行。它做它应该做的事情,我理解它是如何工作的,但我想深入挖掘一下。

int getLine(char arr[], int max) {
    int c, i;
    for (i = 0; i < max - 1 && (c = getchar())!= EOF && c!= '\n'; ++i) {
        arr[i] = c;
    }
    if(c == '\n') {
        arr[i] = c;
    }
    arr[i+1] = '\0';
    return i; /*length without '\n'*/
}

我的问题是关于循环,假设我们有一个空白的命令行,它正在等待用户输入内容,因为第一个getchar()在循环中被调用,让我们说用户输入以下内容:

h

我对当时发生的事情的猜测是,getchar()将'h'存储在arr []中而用户实际上没有按Enter键。

所以如果用户继续输入:

hello

'h''e''l''l'和'o'将存储在arr []中,而用户实际上不会按Enter键,而getchar总共会被调用6次,最后一次是在'O'。然后当用户按下回车键时,getchar()会将'\ n'存储在arr []中,对不对?这究竟是怎么回事?所以我猜这个问题是

getchar()是否需要输入才能完成它的工作?

感谢

1 个答案:

答案 0 :(得分:0)

在您刷新输入之前,

getchar()不返回任何内容,您必须按 Enter / 返回或插入EOF,通过按 Ctrl + D 和Windows控制台 Ctrl + Z 实现的linux终端将完成。