You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++实现带编号测验题目写入文件的问题求助

测验生成程序:实现带编号的题目写入功能

核心需求

将题目编号(如current_numbered_question变量值)与题目内容一同写入文件,格式示例:1.) 蘑菇如何种植?,编号随题目数量自动递增。

现有代码的问题

  1. 文件打开模式错误:每次调用multipleChoice()时用ios::out打开文件,会清空之前写入的内容,无法保留多道题目
  2. 未使用编号变量:current_numbered_question已在主逻辑中递增,但未在写入文件时调用
  3. 内容无分隔:写入的题目和选项未添加换行,导致内容堆叠混乱

修改方案

  1. 更换文件打开模式为ios::app(追加模式),保留已有内容
  2. 写入题目时直接拼接编号、格式符和题目内容
  3. 加入换行符\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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:20:47