C++如何实现两个for循环的输出内容按行并排对齐展示
解决方案
核心问题原因
你现有代码的两个循环是完全独立的执行逻辑:先遍历所有学生输出基础信息,再单独遍历成绩集合输出,二者没有绑定对应关系,自然无法实现学生信息和对应成绩的并排输出。同时你没有使用Student结构体内置的ocjene成员(该成员本身就存储了当前学生的所有成绩),也是导致输出错位的核心原因。
调整后代码
#include <iomanip> // 引入用于格式化宽度的头文件 // 遍历每个学生 for(vector<Student>::iterator stu_it = studenti.begin(); stu_it != studenti.end(); ++stu_it) { bool is_first_course = true; // 遍历当前学生的所有成绩 for(map<string,string>::iterator score_it = stu_it->ocjene.begin(); score_it != stu_it->ocjene.end(); ++score_it) { if(is_first_course) { // 第一门成绩和学生基础信息同行输出,固定宽度保证对齐 cout << "| " << left << setw(16) << stu_it->brojIndeksa << left << setw(10) << stu_it->ime << left << setw(12) << stu_it->prezime; is_first_course = false; } else { // 后续课程前面补和学生信息部分等长的空白,保证对齐不错位 cout << "| " << left << setw(16) << "" << left << setw(10) << "" << left << setw(12) << ""; } // 输出成绩信息后换行 cout << " " << score_it->first << " - " << score_it->second << endl; } }
优化说明
- 使用
<iomanip>库的setw()和left控制输出宽度,替代手动输入空格,适配不同长度的姓名、学号,保证全局对齐 - 每个学生的多门成绩,仅第一门和学生基础信息同行,后续成绩前补对应长度的空白,不会出现错位问题
- 学生信息和自身的成绩直接绑定遍历,不存在信息匹配错误的问题
内容的提问来源于stack exchange,提问作者Wolfhrat
相关产品推荐
相关产品推荐

