我是C语言的初学者。我最近编写了一个程序来打印输入中字符实例数的直方图。水平打印直方图很容易,但垂直方向是一个挑战。
请查看以下代码:
#include <stdio.h>
int main()
{
/*THIS IS JUST A SAMPLE OF WHAT I WANT TO ASK*/
int occurrence = 5;
int i;
for (i=0;i<occurrence;i++){
printf("\t*\n");
}
}
例如,假设任何字母出现5次。所以我将事件设置为5.然后我以星号的形式打印条形图。现在通过这段代码,我可以打印一个包含5个星号的直方图。但问题是如果我想打印其他元素,比如x和y轴,代码会创建一个 \ n 字符。因此,如果我编写代码来打印其他元素,他们就会从下一行开始打印。所以我想出了别的东西。
现在阅读此代码:
#include <stdio.h>
int main()
{
/*THIS IS JUST A SAMPLE OF WHAT I WANT TO ASK*/
int instances = 5;
int i;
for (i=0;i<instances;i++){
printf("\t*\t\t\t\t\t\t\t\t\t");
}
}
现在我所做的是取决于输出屏幕的大小,我创建了9个制表符,以便下一个星号移动到下一行而不打印任何 \ n 字符。
现在的主要问题是:是否还有其他方法可以创建不可见的空间,直到下一步要打印到下一行?
这个问题可能很愚蠢,但如果有解决办法,那对我来说就是最好的。
注意:如果没有这种创建空格的方法,请建议一个创建垂直直方图的好方法。如果有人想在问题中即兴创作,我已经准备好了。
感谢您的帮助!
输出:的
如果我使用第一个代码并使用 printf 语句创建其他图表元素,那么这就是输出::
现在您可以看到由星号构成的条形与x轴和y轴不对齐。这是因为 \ n 字符。
答案 0 :(得分:2)
您可能想要查看一个处理所有图形内容的库,而不是自己使用空格。例如,ncurses是一个非常不错的库,可以在控制台上进行伪图形输出。但是,“ncurses”似乎只适用于Unix,但Windows可能还有其他库。
如果使用库不是一个选项,我建议使用二维字符缓冲区(您将其视为位图)而不是直接将内容写入控制台。它不那么“摆弄”了。请注意在打印前将缓冲行大小截断为控制台行大小,以避免在不需要它们的地方自动换行。
答案 1 :(得分:1)
如果您不想使用curses库,例如,如果您在博物馆中找到了一个打印终端,并希望您的程序可以使用它,那么您必须解决问题。
如果您不使用图形库,则必须逐行打印。所以你的程序看起来像:
这就是算法,实际的编码留给了读者: - )
答案 2 :(得分:0)
您可能想要考虑使用二维数组。首先填充空格。然后用正确索引处打印的字符替换空格。使用两个for循环遍历数组以进行打印。在行的末尾打印一个新行。更改索引的顺序会更改垂直/水平打印。否定是