我编写了以下函数(当我在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()是否需要输入才能完成它的工作?
感谢
答案 0 :(得分:0)
getchar()
不返回任何内容,您必须按 Enter / 返回或插入EOF
,通过按 Ctrl + D 和Windows控制台 Ctrl + Z 实现的linux终端将完成。