我写了下面的函数(当我读里奇关于C的书时),从命令行获取一行。它做了它应该做的事情,我理解它是如何工作的,但我想深入一点。
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()在arr[]中存储“h”,而用户实际上没有按回车键。
因此如果用户继续键入:
hello
'h''e''l''l'和'o'将存储在arr[]中,而用户实际上没有按下回车键,getchar将被调用总共6次,最后一次是在'o'之后。然后当用户按下回车键时,getchar()将在arr[]中存储'\n',我说得对吗?这就是它的工作原理吗?所以我想问题是
getchar() 需要输入才能执行它所做的事情吗?
谢谢
getchar()
在刷新输入之前不会返回任何内容,为此,您必须在linux终端上按Enter/return或插入EOF
,这是通过按CtrlD实现的,而windows控制台