【问题标题】:Vertical Histogram array printing issues垂直直方图阵列打印问题
【发布时间】:2016-02-03 08:30:40
【问题描述】:

我正在尝试制作垂直直方图。我有点困惑,因为在说明中它说“标准终端窗口有 80 个字符列。如果我们将可以绘制的列数限制为最多 80 个,我们就知道需要分配多大的数组而且这个程序写起来很简单。”

我从中了解到的是创建一个长度为 80 的数组并存储来自 scanf 的输入。

int arr[80];

for(i=0;i<80;i++)
{
scanf("%d", &arr[i]);
}

然后我找到数组中的最大元素并使用while循环打印直方图:

max = arr[0];

for(i=0;i<80;i++)
{
   if(arr[i]>max)
   {
     max = arr[i];
   }
}


while(max!=0)
{
   for(k=0;k<80;k++)
   {
     if(arr[k]<max)
     {
       printf(" ");
     }
     else
     {
        printf("#");
     }
   }
   printf("\n");

  max--;
}

但是,当我运行程序时,什么都没有打印,所以我认为它甚至没有达到那个点……我还没有了解 malloc,所以我知道我不必使用它。 以下是它应该是什么样子的示例:

Input:
 1 4 2 3

Output:
  #  
  #   #
  # # #
# # # #

【问题讨论】:

  • 代码对我来说看起来不错。您在这里不需要malloc。您是否尝试过对数据进行硬编码,例如:: int aa[80] = {1, 3, 2, 4, ..} 而不是将其重新写入? scanf("%d", &amp;arr[i]); 如果找不到有效号码,将阻止。
  • 代码对我来说看起来不错。 ideone.com/ryrXkf
  • 我的数组有问题...我在第一个 for 循环中添加了一个 print 语句来打印数组的内容,无论我放什么,它总是“1 1 1”。 ..
  • 发布您的实际代码。

标签: c arrays debugging histogram


【解决方案1】:

您可能会遇到以下问题:

scanf("%d", &arr[i]);

因为没有分隔符(例如换行符或空格)scanf 可以用来决定数字何时完成。人们通过添加一个虚拟参数来吸收空格来解决scanf 的限制,例如,

scanf("%d%s", &arr[i], dummy);

但是这会遇到虚拟参数的长度问题。

【讨论】:

    猜你喜欢
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    相关资源
    最近更新 更多