如何将标准输入中的字符读入c中的数组?
How to read characters from stdin into an array in c?
我最后一次考 C 是在 1991 年,现在我正在帮朋友做作业。
他必须从标准输入中获取字符到一个数组中。看起来很简单。我想我会使用 this question as a reference point.
我们有这个:
printf("Input the line\n");
i=read(0, arg, sizeof(char)*9);
IIUC 获取字符,根据答案评论,我们应该能够像这样将字符直接放入 arg 数组中:
while ((c = getchar()) != '\n' && c != EOF && i2<9 ) {
arg[i2] = c;
i2++;
}
然而打印出这个 (repl.it link):
./main
Input the line
123 456 789
893 456
所以看起来即使我试图通过在 while 循环中添加 i2<9
来将其限制为索引 [0,8],它仍然会获取 89
并将其放在数组的开头,因为数组只能容纳 9 个字符。
这是为什么?我这样做的方式正确吗?
我们不允许使用 fpurge。我假设教授正在尝试教他们如何手动执行此操作...
我不明白你想在这里做什么,
while ((c = getchar()) != '\n' && c != EOF && i2<9 ) {
arg[i2] = c;
i2++;
}
上面的循环主要用于消费read
后输入流中剩余的输入。
即与
i=read(0, arg, sizeof(char)*9);
您正在将 9
个字符读入 arg
,但您输入了 11
个字符以及 \n
。
因此arg
会有内容,
123 456 (null) <---contents
01234567 8 <---indexes
记得 89\n
还留在信息流中。因此,使用 while
循环,您正在从索引 0
.
将 89
读入 arg
数组
我最后一次考 C 是在 1991 年,现在我正在帮朋友做作业。
他必须从标准输入中获取字符到一个数组中。看起来很简单。我想我会使用 this question as a reference point.
我们有这个:
printf("Input the line\n");
i=read(0, arg, sizeof(char)*9);
IIUC 获取字符,根据答案评论,我们应该能够像这样将字符直接放入 arg 数组中:
while ((c = getchar()) != '\n' && c != EOF && i2<9 ) {
arg[i2] = c;
i2++;
}
然而打印出这个 (repl.it link):
./main
Input the line
123 456 789
893 456
所以看起来即使我试图通过在 while 循环中添加 i2<9
来将其限制为索引 [0,8],它仍然会获取 89
并将其放在数组的开头,因为数组只能容纳 9 个字符。
这是为什么?我这样做的方式正确吗?
我们不允许使用 fpurge。我假设教授正在尝试教他们如何手动执行此操作...
我不明白你想在这里做什么,
while ((c = getchar()) != '\n' && c != EOF && i2<9 ) {
arg[i2] = c;
i2++;
}
上面的循环主要用于消费read
后输入流中剩余的输入。
即与
i=read(0, arg, sizeof(char)*9);
您正在将 9
个字符读入 arg
,但您输入了 11
个字符以及 \n
。
因此arg
会有内容,
123 456 (null) <---contents
01234567 8 <---indexes
记得 89\n
还留在信息流中。因此,使用 while
循环,您正在从索引 0
.
89
读入 arg
数组