为什么我的C++水平条形图代码无法接收用户输入且支持任意数量输入?
现有代码问题梳理
- 声明了固定长度为1的数组
input,无法存储任意数量的输入值 - 无论用户输入是否合法,都会强制输出usage提示,且提示逻辑仅执行1次,不符合预期
- 读取到的输入值
n未存入数组,后续访问input数组属于读取未初始化的内存,会触发未定义行为 - 换行符拼写错误为
/n,正确应为\n - 第二层循环的判断条件
j<input[j]逻辑完全错误,无法对应生成指定长度的条形
修复后完整代码
#include <iostream> #include <vector> using namespace std; int main () { vector<int> input_list; int val; // 循环读取任意数量正整数,遇到非整数/负数时停止输入 while (cin >> val) { if (val < 0) break; input_list.push_back(val); } // 仅无有效输入时输出usage提示 if (input_list.empty()) { cout << "usage: bargraph integer-list \n"; return 1; } // 生成水平条形图 for (int idx = 0; idx < input_list.size(); idx++) { cout << idx << " "; for (int cnt = 0; cnt < input_list[idx]; cnt++) { cout << "#"; } cout << "\n"; } return 0; }
使用说明
- 运行程序后直接输入任意数量的正整数,用空格/换行分隔即可
- 输入非整数、或者输入负数时,程序自动停止输入并生成条形图
- 若未输入任何有效正整数直接终止输入,会输出usage提示
内容的提问来源于stack exchange,提问作者MikeyJ
相关产品推荐
相关产品推荐

