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