首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用C语言制作条形图?

如何用C语言制作条形图?
EN

Stack Overflow用户
提问于 2010-03-31 10:57:30
回答 3查看 4.5K关注 0票数 0

我已经写了一个程序,它以与输入相同的顺序打印出整数,每行5个数字。也就是说,前5个整数将打印在第一行;接下来的5个整数将打印在下一行;依此类推。我也试着把数字打印成条形图格式,比如,

代码语言:javascript
复制
81-105 ( 1) x
56-80 ( 5) xxxxx
6-11(5) xxxxx
-1-5 (3) xxx

我的程序:

代码语言:javascript
复制
cntr=0;
 while (fscanf(in, "%d", &a[i]) != EOF)
   {i++;

 fprintf(out, "%d-%d (%d) %s\n", A, B, k, x, cntr);
 fprintf(out, "%d\n", k, cntr);

    fprintf(out, "x", a[i]);
    i++;
   }

   fprintf(out, "1864-2336 (%d)%s\n", k, x);
   fprintf(out, "1391-1863 (%d)%s\n", k, x);
   fprintf(out, "918-1390 (%d)%s\n", k, x);
   fprintf(out, "445-917 (%d)%s\n", k, x);
   fprintf(out,"-28-444 (%d)%s\n", k, x);
    fclose(in);
    fclose(out);
return 0;
}
EN

回答 3

Stack Overflow用户

发布于 2010-04-01 00:29:23

您不必使用循环来打印x,您可以声明一个x字符串,该字符串的长度与您需要的最大值一样长,然后在printf调用中使用大小规范来控制打印的数量。这里有一个简单的例子来说明我的意思:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>

int main(void)
{
  char maxBar[] = "xxxxxxxxxx";
  size_t i;

  for (i = 0; i < strlen(maxBar); i++)
  {
    printf("%lu: %-*.*s\n", (unsigned long) i, strlen(maxBar), i, maxBar); 
  }
  return 0;
}

输出应如下所示:

代码语言:javascript
复制
0: __________          
1: x_________
2: xx________
3: xxx_______
4: xxxx______
5: xxxxx_____

等等,其中_表示一个空格字符。

printf转换说明符中的*表示字段宽度或精度规范作为参数传递给printf。写作

代码语言:javascript
复制
printf("%-*.*s\n", 10, 2, "test");

和写作是一样的

代码语言:javascript
复制
printf("%-10.2s\n", "test");

从左往右看,这意味着

  1. -:左对齐output
  2. 10:最小字段宽度为10 characters
  3. .2:精度(打印的最大字符数)为2

所以输出看起来像这样

代码语言:javascript
复制
te________

其中_表示空格字符。

所以,假设你事先知道你的酒吧需要多大,你可以这样写

代码语言:javascript
复制
for (i = 0; i < k; i++)
{
  printf("%d-%d (%d) %*.*s\n", lo[k], hi[k], ct[k], strlen(maxBar), ct[k], maxBar);
}
票数 2
EN

Stack Overflow用户

发布于 2010-03-31 11:09:27

只需执行一次循环以打印所需数量的x

代码语言:javascript
复制
   fprintf(out, "1864-2336 (%d)%s\n", k, x);
   for(x=k;x>0;x--)
      fprint(out,"%s","x");
   fprintf(out,"\n");

干杯!

/B2S

票数 0
EN

Stack Overflow用户

发布于 2010-03-31 11:17:26

有很多方法可以做到这一点

似乎您已经在某个地方声明了用户输入的值的数组。a[]

为了计算条形图,您可以在用户输入所有值之后,对该数组进行排序(例如,使用qsort()),然后遍历该数组,检查该数组中出现的相同值的数量-这将是要打印的'*‘数量

我认为你应该先让用户输入值,然后再输出。

您显示的代码看起来是错误的,例如,您在while循环中增加了两次'i‘。您在递增之后使用ai,因此它将不具有读取值。

同样,当以这种方式读取数字时,最好使用fgets/atoi,这样无效的数字不会导致程序崩溃。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2550194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档