C++实现带编号测验题目写入文件的问题求助
测验生成程序:实现带编号的题目写入功能
核心需求
将题目编号(如current_numbered_question变量值)与题目内容一同写入文件,格式示例:1.) 蘑菇如何种植?,编号随题目数量自动递增。
现有代码的问题
- 文件打开模式错误:每次调用
multipleChoice()时用ios::out打开文件,会清空之前写入的内容,无法保留多道题目 - 未使用编号变量:
current_numbered_question已在主逻辑中递增,但未在写入文件时调用 - 内容无分隔:写入的题目和选项未添加换行,导致内容堆叠混乱
修改方案
- 更换文件打开模式为
ios::app(追加模式),保留已有内容 - 写入题目时直接拼接编号、格式符和题目内容
- 加入换行符
\n分隔不同内容,提升文件可读性
修改后的完整代码
#include <iostream> #include <fstream> #include <string> #include <sstream> using namespace std; int number_of_questions; int current_numbered_question = 0; int user_choice; string user_question; string user_answer; void quizBuilder(); void multipleChoice() { fstream file; // 使用ios::app追加模式打开文件,避免覆盖已有内容 file.open("quiz.txt", ios::app); if (!file.is_open()) { cout << "Error when opening file."; return; } cout << "What is your question?\n"; cin.ignore(); getline(cin, user_question); // 写入带编号的题目 file << current_numbered_question << ".) " << user_question << "\n"; cout << "What is the first multiple choice answer you would like?\n"; getline(cin, user_answer); // 写入选项并换行分隔 file << "- " << user_answer << "\n\n"; file.close(); return; } void quizBuilder() { do { cout << "What type of question would you like to create?\n"; cout << "1. multiple choice\n"; cout << "2. short written answer\n"; cout << "Type of question: "; cin >> user_choice; cout << "\n\n"; current_numbered_question++; if (user_choice == 1) { multipleChoice(); } else { cout << "Invalid choice.\n"; } } while (current_numbered_question != number_of_questions); } string greeting() { cout << "Welcome to the Quiz Maker!\n"; cout << "How many questions would you like to make for this quiz?\n"; cout << "Number of questions: "; cin >> number_of_questions; cout << "\n\n"; quizBuilder(); return ""; } int main() { // 初始化文件,清空旧内容(无需清空可移除该段) fstream file; file.open("quiz.txt", ios::out); if (file.is_open()) { cout << "File was successfully created/reset.\n\n"; file.close(); } else { cout << "Error creating file.\n"; } greeting(); return 0; }
关键修改说明
- 文件打开模式:
ios::app确保每次写入都追加到文件末尾,不会覆盖之前的题目 - 编号写入:通过
file << current_numbered_question << ".) " << user_question << "\n";直接完成编号与题目的拼接输出,无需额外字符串处理 - 内容格式化:加入
\n和-让题目和选项排版更清晰,便于后续读取使用
内容的提问来源于stack exchange,提问作者JUNKJACKZACK
相关产品推荐
相关产品推荐

