c - 垂直直方图阵列打印问题

标签 c arrays debugging histogram

我正在尝试制作垂直直方图。我有点困惑,因为在说明中它说“一个标准的终端窗口是 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:
  #  
  #   #
  # # #
# # # #

最佳答案

你可能遇到了问题:

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

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

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

然而,这会遇到虚拟参数的长度问题。

关于c - 垂直直方图阵列打印问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33494869/

相关文章:

python - 在 Flask 中打印带有未捕获异常的变量值的堆栈跟踪

Coverity Scan 无法使用定义的 _GNU_SOURCE 构建 <stdlib.h>

arrays - 如何在 Scala 中通过算法实例化和操作多维数组

ios - swift 4 : Array for all types of Ints and Floating point numbers

c++ - 在 C++ 中初始化多维数组

java - 如何获取占用 100% cpu 的正在运行的 java 程序的完整堆栈跟踪?

CMSIS - 外设定义 - 具有 union 语法的结构?

c - 动态创建线程并传递一个整数

c - C中的unsigned int和signed int有什么区别?

检查 C 项目中未使用的变量