C++程序编译运行正常 无法向Warframe对应CSV文件写入内容排查
C++文件写入失败问题排查结果
核心错误原因
- ofstream重复打开导致流失效:你在构造
ofstream MyExcelFile时已经传入了"Warframe_Weapons_Sheet"作为文件名打开流,后续再调用open()方法关联csv文件属于重复打开操作,会直接将流置为失败状态,后续所有写入操作都会被忽略。 - if判断误用赋值运算符:
if (Weapon_Type_M_or_R = true)中的=是赋值运算符,不是等值判断的==,该行代码会直接把变量强制赋值为true,永远不会进入else分支,且该赋值表达式返回值永远为true,逻辑完全不符合预期。 - 布尔值输入不匹配:默认情况下
cin读取bool类型变量时只接受整数输入(0对应false,非0对应true),你提示用户输入true/false字符串会触发输入流失败,Weapon_Type_M_or_R会一直保持初始值false。
修复示例
#include <iostream> #include <string> #include <fstream> using namespace std; string Weapon_Name = "undefined"; string Weapon_Type_Name = "undefined"; bool Weapon_Type_M_or_R = false; int main(int args, char * argv[]) { cout << "Input the weapon name." << endl; cin >> Weapon_Name; cout << "Confirm weapon type." << endl; cin >> Weapon_Type_Name; // 开启bool值的字符串输入支持 cout << "Is weapon melee or range? true or false." << endl; cin >> boolalpha >> Weapon_Type_M_or_R; // 修正等值判断符,去掉重复打开逻辑 if (Weapon_Type_M_or_R == true) { // 构造时直接传入目标路径 ofstream MyExcelFile("C:/Users/A12st/Downloads/Warframe_Melee_Weapons_Sheet.csv"); // 添加打开成功判断,避免路径不存在/权限不足问题 if (MyExcelFile.is_open()) { MyExcelFile << "Weapon Name, Weapon Type" << endl; MyExcelFile << Weapon_Name << "," << Weapon_Type_Name << endl; MyExcelFile.close(); } } else { ofstream MyExcelFile("C:/Users/A12st/Downloads/Warframe_Ranged_Weapons_Sheet.csv"); if (MyExcelFile.is_open()) { MyExcelFile << "Weapon Name, Weapon Type" << endl; MyExcelFile << Weapon_Name << "," << Weapon_Type_Name << endl; MyExcelFile.close(); } } return 0; }
其他注意事项
- 提前确认目标路径
C:/Users/A12st/Downloads/存在,且程序对该路径有写入权限 - 如果不需要每次写入都覆盖原有文件内容,可以在构造ofstream时追加
ios::app参数实现追加写入
内容的提问来源于stack exchange,提问作者Shuhab Ahmed
相关产品推荐
相关产品推荐

