C++作业编程求助:销售条形图程序后半部分卡壳
C++作业:门店销售额条形图实现
题目要求
编写一个程序,要求用户输入5家门店当日的销售额,然后显示一个对比各门店销售额的条形图。条形图的每个条形由一行星号组成,每个星号代表100美元的销售额。
示例输出
请输入门店1今日销售额:1000(回车) 请输入门店2今日销售额:1200(回车) 请输入门店3今日销售额:1800(回车) 请输入门店4今日销售额:800(回车) 请输入门店5今日销售额:1900(回车) 销售额条形图 (每个*代表100美元) 门店1:********** 门店2:************ 门店3:****************** 门店4:******** 门店5:*******************
当前代码
#include <iostream> using namespace std; int main() { int stores; int i = 1;//counter variables int sale; int j = 1;//counter variables // Get input from the user to see how many stores you are listing cout << "Please enter how many stores you are inputting data for. "; cin >> stores; while(j<= stores) { cout << "Enter today's sale for store "<< i << ": "; cin >> sale; j++; i++; } cout << "SALES BAR CHART:" << endl; cout << "Each * = $100" << endl; }
问题分析与修复代码
当前代码的核心问题是没有存储每个门店的销售额,仅用单个sale变量会导致每次输入覆盖之前的数据,无法后续生成条形图。我们可以用数组来存储所有门店的销售额,再通过循环生成对应数量的星号,完全符合仅使用循环和if/else的要求。
固定5家门店的修复代码
#include <iostream> using namespace std; int main() { const int STORE_COUNT = 5; // 题目要求固定5家门店 int sales[STORE_COUNT]; // 存储每家门店的销售额 // 输入每家门店的销售额 for (int i = 0; i < STORE_COUNT; i++) { cout << "请输入门店" << (i + 1) << "今日销售额:"; cin >> sales[i]; } // 输出条形图标题 cout << "\n销售额条形图" << endl; cout << "(每个*代表100美元)" << endl; // 生成每个门店的条形 for (int i = 0; i < STORE_COUNT; i++) { cout << "门店" << (i + 1) << ":"; // 计算需要的星号数量:销售额除以100,取整数部分 int starCount = sales[i] / 100; // 循环输出对应数量的星号 for (int j = 0; j < starCount; j++) { cout << "*"; } cout << endl; } return 0; }
支持自定义门店数量的修复代码
如果保留原代码中“让用户输入门店数量”的逻辑,可调整为:
#include <iostream> using namespace std; int main() { int storeCount; cout << "请输入要统计的门店数量:"; cin >> storeCount; int sales[100]; // 最多支持100家门店,可按需调整 // 输入销售额 for (int i = 0; i < storeCount; i++) { cout << "请输入门店" << (i + 1) << "今日销售额:"; cin >> sales[i]; } // 输出条形图 cout << "\n销售额条形图" << endl; cout << "(每个*代表100美元)" << endl; for (int i = 0; i < storeCount; i++) { cout << "门店" << (i + 1) << ":"; int starCount = sales[i] / 100; // 处理负数销售额的情况,确保星号数量不为负 if (starCount < 0) starCount = 0; for (int j = 0; j < starCount; j++) { cout << "*"; } cout << endl; } return 0; }
内容的提问来源于stack exchange,提问作者Chaofficia1
相关产品推荐
相关产品推荐

