c++ - 跳入 C++:第 5 章问题 7 使用垂直条形图
问题描述
我需要帮助来创建具有所需学习经验限制的垂直条形图。例如,仅使用列出的基本基础知识:if 语句、布尔值、循环、字符串、算术和比较运算符。基本上让我知道我的经验在澄清语言方面有多么有限。现在,我已经完成了这个问题,但在我看来,输出看起来不像是一个理想的图表,所以这就是为什么发布。我将提供我用来完成这个问题的问题和有效代码。
- 编写一个程序,提供用 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--;
}
}
解决方案
我认为首先要做的是确保所有标签占用相同数量的空间,因此图表中的条形图都从左侧的相同位置开始。
文本建议缩放图形以适应屏幕。要做到这一点,我们可能想要取三个计数中的最大值,并计算出乘以什么,以便它接近(但不大于)屏幕宽度(例如,80 列),然后将所有三个相乘该比例因子的值。
我不会在条中使用空格,因此每个条看起来更“实心”。
可能的结果:
Technology: ****************************************
Education: ##########################
Agriculture: ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
如果您想要垂直条而不是水平条,您通常会通过将字符存储到(一种可能性)二维数组中来做到这一点。然后,当您在该二维数组中创建完图形后,您“侧向”扫描数组以打印出其内容,并“向后”扫描另一个方向,因此您的标签最终位于屏幕底部。我首先用空格字符填充数组,然后将条形的内容写入数组。然后在那之后,您将其打印到屏幕上。
推荐阅读
- android - 为三星 a[num] 手机开发应用程序的问题
- c# - xamarin 形式的跨平台移动应用程序(iOS、Android)中的依赖注入
- java - spring-cloud-stream-binder-kafka 为消费者设置手动偏移量
- python - ValueError: no enough values to unpack (expected 2, got 1) 请帮我解决这个错误
- installation - 没有提出客户运输规则
- jquery-isotope - 同位素排序,取决于过滤器
- bloomberg - 通过 QuickFixJ 向 Bloomberg 发送消息时出错
- go - PATCH API 不适用于 Google Cloud Run 实例
- c# - 为什么我的 .exe 文件在我安装程序时不起作用?
- c - 用 C 语言编写一个程序,从文件中读取最多 100 个整数,其中文件中的第一个值是文件中后续值的数量