如何在新线之前创建不可见空间?

时间:2015-06-09 16:38:38

标签: c

我是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 语句创建其他图表元素,那么这就是输出:: OUTPUT

现在您可以看到由星号构成的条形与x轴和y轴不对齐。这是因为 \ n 字符。

3 个答案:

答案 0 :(得分:2)

您可能想要查看一个处理所有图形内容的库,而不是自己使用空格。例如,ncurses是一个非常不错的库,可以在控制台上进行伪图形输出。但是,“ncurses”似乎只适用于Unix,但Windows可能还有其他库。

如果使用库不是一个选项,我建议使用二维字符缓冲区(您将其视为位图)而不是直接将内容写入控制台。它不那么“摆弄”了。请注意在打印前将缓冲行大小截断为控制台行大小,以避免在不需要它们的地方自动换行。

答案 1 :(得分:1)

如果您不想使用curses库,例如,如果您在博物馆中找到了一个打印终端,并希望您的程序可以使用它,那么您必须解决问题。

如果您不使用图形库,则必须逐行打印。所以你的程序看起来像:

  • 计算出现的字符
  • 计算最大出现次数
  • 从最大出现到0的每一行
    • 为打印空格(未到达)的每个角色计算一条线
    • 表示每个角色
      • 如果出现的次数大于行索引,则将行标记放在行
      • 中的正确位置
    • 打印行

这就是算法,实际的编码留给了读者: - )

答案 2 :(得分:0)

您可能想要考虑使用二维数组。首先填充空格。然后用正确索引处打印的字符替换空格。使用两个for循环遍历数组以进行打印。在行的末尾打印一个新行。更改索引的顺序会更改垂直/水平打印。否定是

  1. 必须把整件事留在记忆中。
  2. 需要多次传球。一个用于设置字符,另一个用于打印。