1

如果我要echo "1001" | ./test在终端中输入。

并将test“1001”存储到一个数组中,我该怎么做?

test.c

#include <stdio.h>
main()  {
  int  c, i, j;

  int a[4];
  while(c = (getchar() != EOF)) {
    a[i++] = c;
  }
  for(j = 0; j < 5; j++ {
    printf("%d", a[j]);
  }
}

但它不起作用。

4

4 回答 4

1

为什么逐个字符地读取字符?只需阅读该行。

char line[50];
fgets(line, sizeof(line), fp);
// line now contains "1001\n". You can chop off the \n with the following line:
line[strlen(line)-1] = '\0';
于 2013-09-18T03:17:25.787 回答
1

我发现这个程序有效:

#include <stdio.h>

int main(int argc, char** argv)
{
  int  c, i = 0, j;

  int a[4];
  while((c = getchar()) != EOF && i < 4)
  {
    a[i++] = c;
  }

  for(j = 0; j < 4; j++)
  {
    printf("%c", a[j]);
  }
  printf("\n");  // Be nice to non-windows users :)

  return 0;
}

您的原始程序有一些更改。初始化i,限制读取的字符数,仅输出 4 个字符 ( j < 4) 并修复一些语法(缺少括号和int main(int argc, char** argv))。哦,(c = getchar()) != EOF既然您首先要存储您的角色,然后再进行比较。

我也更改%d%c打印字符,如果需要,您可以将其更改回来,这取决于您实际希望程序生成什么。

于 2013-09-18T03:04:06.720 回答
1
  1. 初始化i为 0。
  2. 在您的代码中:

    c = (getchar() != EOF)
    

    表示 c 是一个布尔值,而不是您从输入中获得的字符。将其更改为:

    (c = getchar()) != EOF
    
于 2013-09-18T03:04:54.727 回答
0

你还没有初始化i变量,所以它是垃圾。此外,条件应该是while ((c = getchar()) != EOF)

于 2013-09-18T03:01:58.497 回答