首页 > 解决方案 > 跳入 C++:第 5 章问题 7 使用垂直条形图

问题描述

我需要帮助来创建具有所需学习经验限制的垂直条形图。例如,仅使用列出的基本基础知识:if 语句、布尔值、循环、字符串、算术和比较运算符。基本上让我知道我的经验在澄清语言方面有多么有限。现在,我已经完成了这个问题,但在我看来,输出看起来不像是一个理想的图表,所以这就是为什么发布。我将提供我用来完成这个问题的问题和有效代码。

  1. 编写一个程序,提供用 3 个可能的值计算投票结果的选项。程序的第一个输入是投票问题;接下来的三个输入是可能的答案。第一个答案用 1 表示,第二个答案用 2 表示,第三个答案用 3 表示。答案一直计算到输入 0。然后程序应该显示民意调查的结果——尝试制作一个条形图,无论输入了多少结果,结果都会适当地缩放以适合您的屏幕。
#include<iostream>

int main()
{
    bool poll = false;
    int Tech = 0, Edu = 0, Agri = 0;

    std::cout << "VOTING POLL" << std::endl;
    std::cout << "----------------------------" << std::endl;
    std::cout << "----------------------------" << std::endl;

    
    while(!poll)
    {
        std::cout << "Of the year 2022, in the United States of America, what should be the top priority of our concerns?" << std::endl;
        std::cout << " 1.Technology\n 2.Education\n 3.Agriculture" << std::endl;
        std::cout << "\n";
        
        int pollAnswer;
        std::cin >> pollAnswer;
        
        if(pollAnswer == 1)
        {
            Tech++;
        }
        else if(pollAnswer == 2)
        {
            Edu++;
        }
        else if(pollAnswer == 3)
        {
            Agri++;
        }
        else if(pollAnswer == 0)
        {      
            poll = true;
        }
        else
        {
            std::cout << "\n" << "Invalid. Please choose an answer from the above listing." << std::endl;
        }
    }
        std::cout << "Technology: ";
        while(Tech > 0)
        {
            std::cout << "* ";
            Tech--;
        }
        std::cout << std::endl;
        
        std::cout << "Education: ";
        while(Edu > 0)
        {
            std::cout << "# ";
            Edu--;
        }
        std::cout << std::endl;
        
        std::cout << "Agriculture: ";
        while(Agri > 0)
        {
            std::cout << "| ";
            Agri--;
        }
}

标签: c++

解决方案


  • 我认为首先要做的是确保所有标签占用相同数量的空间,因此图表中的条形图都从左侧的相同位置开始。

  • 文本建议缩放图形以适应屏幕。要做到这一点,我们可能想要取三个计数中的最大值,并计算出乘以什么,以便它接近(但不大于)屏幕宽度(例如,80 列),然后将所有三个相乘该比例因子的值。

  • 我不会在条中使用空格,因此每个条看起来更“实心”。

可能的结果:

 Technology: ****************************************
  Education: ##########################
Agriculture: ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

如果您想要垂直条而不是水平条,您通常会通过将字符存储到(一种可能性)二维数组中来做到这一点。然后,当您在该二维数组中创建完图形后,您“侧向”扫描数组以打印出其内容,并“向后”扫描另一个方向,因此您的标签最终位于屏幕底部。我首先用空格字符填充数组,然后将条形的内容写入数组。然后在那之后,您将其打印到屏幕上。


推荐阅读