C++如何根据用户输入的学生姓名创建对应变量避免逐个预定义?
C++学生成绩动态存储实现方案
你需要用C++标准库提供的关联容器实现需求,不需要提前手动定义大量变量,核心逻辑是用学生姓名作为键,成绩作为值存储。
实现步骤
- 引入必要头文件:除了基础的
iostream和string外,需要引入map或unordered_map头文件 - 定义关联容器对象,类型为
std::map<std::string, int>或者std::unordered_map<std::string, int>,前者会自动按照学生姓名排序,后者查询速度更快 - 接收用户输入的学生姓名和成绩,直接插入到容器中即可
示例代码
#include <iostream> #include <string> #include <unordered_map> // 也可以替换成<map> int main() { // 定义存储学生姓名-成绩的容器,不需要提前定义大量student_xx变量 std::unordered_map<std::string, int> student_scores; std::string name; int score; std::cout << "请输入学生姓名和成绩,输入Ctrl+Z结束输入:" << std::endl; // 循环接收输入,直接存入容器 while (std::cin >> name >> score) { student_scores[name] = score; std::cout << "已成功保存学生 " << name << " 的成绩:" << score << std::endl; } // 查询示例:输入姓名获取成绩 std::cout << "\n请输入要查询的学生姓名:" << std::endl; std::cin.clear(); // 清除输入结束的状态位 std::cin >> name; auto it = student_scores.find(name); if (it != student_scores.end()) { std::cout << name << " 的成绩为:" << it->second << std::endl; } else { std::cout << "未找到该学生的成绩记录" << std::endl; } return 0; }
说明
- 补充纠正笔误:你提问里的
cin <<是用法错误,标准输入流读取数据应该用cin >>,输出流打印才用cout << - 这种实现方式支持任意数量的学生成绩存储,不需要提前手动声明变量
- 后续要修改、删除、统计成绩都可以直接对容器操作,语法简单易维护
- 如果需要存储多科成绩,可以把容器的值类型换成数组、结构体或者另一个关联容器即可
内容的提问来源于stack exchange,提问作者João Guilherme
相关产品推荐
相关产品推荐

