C++实现美国首府猜谜作业代码运行错误排查求助
C++首府猜谜作业问题排查与修正方案
现有代码存在的问题
- 初始化语法错误:
{"Arizona", "Phoenix"}后缺少逗号,会直接导致编译失败 - 迭代器使用错误:map容器本身没有
first/second成员,循环中应该使用迭代器it访问元素,即it->first(州名)、it->second(首府名) - 功能不符合要求:
- 没有实现随机提问逻辑,当前是按固定顺序遍历所有州
- 没有接收用户输入的逻辑,无法判断答题正误
- 没有统计正确、错误次数的逻辑
- 缺少随机功能依赖的头文件
修正后的完整代码
#include <iostream> #include <map> #include <string> #include <cstdlib> #include <ctime> #include <iterator> using namespace std; int main() { // 修正初始化逗号错误 map<string, string> states = { {"Alabama", "Montgomery"}, {"Alaska", "Juneau"}, {"Arizona", "Phoenix"}, {"Arkansas","Little Rock"}, {"California", "Sacramento"}, {"Colorado", "Denver"}, {"Connecticut", "Hartford"}, {"Delaware", "Dover"}, {"Florida", "Tallahassee"}, {"Georgia", "Atlanta"}, {"Hawaii", "Honolulu"}, {"Idaho", "Boise"}, {"Illinois", "Springfield"}, {"Indiana", "Indianapolis"}, {"Iowa", "Des Moines"}, {"Kansas", "Topeka"}, {"Kentucky", "Frankfort"}, {"Louisiana", "Baton Rouge"}, {"Maine", "Augusta"}, {"Maryland", "Annapolis"}, {"Massachusetts", "Boston"}, {"Michigan", "Lansing"}, {"Minnesota", "Saint Paul"}, {"Mississippi", "Jackson"}, {"Missouri", "Jefferson City"}, {"Montana", "Helena"}, {"Nebraska", "Lincoln"}, {"Nevada", "Carson City"}, {"New Hampshire", "Concord"}, {"New Jersey", "Trenton"}, {"New Mexico", "Santa Fe"}, {"New York", "Albany"}, {"North Carolina", "Raleigh"}, {"North Dakota", "Bismarck"}, {"Ohio", "Columbus"}, {"Oklahoma", "Oklahoma City"}, {"Oregon", "Salem"}, {"Pennsylvania", "Harrisburg"}, {"Rhode Island", "Providence"}, {"South Carolina", "Columbia"}, {"South Dakota", "Pierre"}, {"Tennessee", "Nashville"}, {"Texas", "Austin"}, {"Utah", "Salt Lake City"}, {"Vermont", "Montpelier"}, {"Virginia", "Richmond"}, {"Washington", "Olympia"}, {"West Virginia", "Charleston"}, {"Wisconsin", "Madison"}, {"Wyoming", "Cheyenne"} }; // 初始化随机数种子 srand((unsigned int)time(NULL)); int correct = 0, wrong = 0; int questionCount = 5; // 可自行调整答题次数 cout << "欢迎参加美国首府猜谜游戏,共" << questionCount << "道题,请输入对应首府名称:" << endl; for (int i = 0; i < questionCount; i++) { // 随机抽取一个州 auto it = states.begin(); int randomIndex = rand() % states.size(); advance(it, randomIndex); string userInput; cout << "\n第" << i+1 << "题:What is the capital of " << it->first << "?" << endl; getline(cin, userInput); // 支持接收带空格的首府名称 if (userInput == it->second) { cout << "回答正确!" << endl; correct++; } else { cout << "回答错误,正确答案是:" << it->second << endl; wrong++; } } // 输出最终统计结果 cout << "\n答题结束,统计结果:" << endl; cout << "正确题数:" << correct << endl; cout << "错误题数:" << wrong << endl; cout << "正确率:" << (correct * 100.0 / questionCount) << "%" << endl; return 0; }
可选优化点
- 将用户输入和正确答案统一转为小写/大写后再对比,避免大小写敏感导致的误判
- 增加题目去重逻辑,避免同一道题重复出现
- 支持用户自定义答题数量
内容的提问来源于stack exchange,提问作者Game Face
相关产品推荐
相关产品推荐

