如何将标准输入中的字符读入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 数组