繁体   English   中英

如何将 stdin 中的字符读入 c 中的数组?

[英]How to read characters from stdin into an array in c?

我上一次做 C 是在 1991 年,现在我正在帮朋友做作业。

他必须将标准输入中的字符放入一个数组中。 看起来很简单。 我想我会用 这个问题作为参考点

我们有这个:

    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 链接)

 ./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后消耗输入 stream 中的剩余输入。


也就是说,与

i=read(0, arg, sizeof(char)*9);

您正在将9字符读入arg但您输入了11字符和\n

因此arg将有内容,

  123 456 (null)   <---contents
  01234567 8       <---indexes

还记得89\n留在 stream 中。 因此,使用while循环,您可以从索引089读入arg数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM