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

实现C++教材中文件流get()与put()函数示例时文件写入失败求助

问题分析与解决

你的代码无法正常写入文件,主要存在以下几个问题及对应解决办法:

1. 错误提示逻辑错误

使用ios::out模式打开fstream时,若目标文件不存在会自动创建,所以else分支的「ERROR: File does not exist.」提示并不准确,应改为文件打开失败的通用提示:

cout << "ERROR: Failed to open file.";

2. 程序逻辑可能与教材示例预期不符

你的代码逻辑是读取用户输入的字符,直到输入!为止,将这些字符写入文件,而非把cout输出的那段文本写入文件。如果教材示例是要把指定文本写入文件,应该直接遍历字符串的每个字符用put()写入,修改后的代码如下:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
    fstream outFile;
    string text = "I can tell if you keep up at this you'll be great!";

    outFile.open("great.txt", ios::out);
    cout << text << endl;

    if(outFile) {
        for(char ch : text) {
            outFile.put(ch);
        }
        outFile.close();
    }
    else {
        cout << "ERROR: Failed to open file.";
    }

    return 0;
}

3. 若坚持原逻辑(读取用户输入写入)

如果你的目标确实是读取用户输入写入文件,需注意:运行程序后必须输入字符直到输入!,程序才会停止读取并将内容写入文件。比如输入Hello World!,文件中会写入Hello World(不含!)。

另外,也可以在循环结束后手动刷新缓冲区(虽然close()会自动完成这一步),确保内容立即写入:

outFile.flush();

内容的提问来源于stack exchange,提问作者daVinci.exe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 17:30:03