【问题标题】:Is there a way to have printf() properly print out an array (of floats, say)?有没有办法让 printf() 正确打印出一个数组(比如浮点数)?
【发布时间】:2011-12-09 08:10:43
【问题描述】:

我相信我已经仔细阅读了整个 printf() 文档,但找不到任何方法可以将其打印出来,例如,float(s) 的 10 元素数组的元素。

例如,如果我有

float[] foo = {1., 2., 3., ..., 10.};

那么我想有一个单一的陈述,例如

printf("what_do_I_put_here\n", foo);

这会打印出以下内容:

1. 2. 3. .... 10.

有没有办法在 vanilla C 中做到这一点?

【问题讨论】:

  • 我使用#define printarr(fmt, dat, len) for (int i = 0; i < len; i++) printf(fmt, dat[i])之类的东西,然后用printarr("%.2f ", foo, (sizeof(foo) / sizeof(float)));调用它

标签: c printf


【解决方案1】:

你需要遍历数组的元素

float foo[] = {1, 2, 3, 10};
int i;
for (i=0;i < (sizeof (foo) /sizeof (foo[0]));i++) {
    printf("%lf\n",foo[i]);
}

或者创建一个函数,返回stacked sn printf,然后打印出来

printf("%s\n",function_that_makes_pretty_output(foo))

【讨论】:

    【解决方案2】:

    你必须遍历数组和printf()每个元素:

    for(int i=0;i<10;++i) {
      printf("%.2f ", foo[i]);
    }
    
    printf("\n");
    

    【讨论】:

      【解决方案3】:

      你需要循环一下:

      for (int i = 0; i < sizeof(foo) / sizeof(float); ++i)
         printf("%f", foo[i]);
      printf("\n");
      

      【讨论】:

      • 在 Fortran 中可以使用隐含的 do 循环。 write(*,'(3d 3d 3d)')(i,i=1,12) 将打印 4 行,其中包含从 1 到 12 的数字,每行 3 位。打印时每个数字需要 3 个字符。是否有 C 等效项可以执行此操作?
      • 看起来像在循环中,仅仅使用
      • 你试过了吗?数字打印没有分隔,所以不可读。我认为写 sizeof(foo) / sizeof(foo[0]) 也是一种常见的做法,所以如果有人有一天将数组从 float 更改为 double,那么你的长度计算仍然有效。我通常只定义一个 LENGTH(a) 宏。
      【解决方案4】:

      我认为没有办法在 printf 中为您打印数组。 “printf”函数不知道你的数组有多长。

      【讨论】:

      • 可以在格式中指定。但我认为不存在任何这样的说明符。
      【解决方案5】:

      C 不是面向对象的编程 (OOP) 语言。所以你不能在 OOP 中使用属性。例如。 C 中没有 .length 属性。因此您需要为您的任务使用循环。

      【讨论】:

        【解决方案6】:

        老实说,所有人都很好,但如果有人使用 n 个时间数字并将它们显示在输出中,这将很容易或更有效。所以更喜欢这将是一个不错的选择。不要预定义数组变量让用户定义并显示结果。像这样..

        int main()
        {
            int i,j,n,t;
        int arry[100];
            scanf("%d",&n);
           for (i=0;i<n;i++)
           { scanf("%d",&t);
               arry[i]=t;
           }
        for(j=0;j<n;j++)
            printf("%d",arry[j]);
        
        return 0;
        }
        

        【讨论】:

          猜你喜欢
          • 2020-07-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-28
          • 1970-01-01
          • 1970-01-01
          • 2022-07-23
          • 1970-01-01
          相关资源
          最近更新 更多