实现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
相关产品推荐
相关产品推荐

