C++如何读取TXT文件并将数据存入并行数组?
账户文件读取与数组存储实现方案
看起来你在处理账户信息文件读取的时候卡壳了,我来帮你把逻辑理清楚,给出完整可运行的实现代码。
首先先明确你的需求:
读取一个TXT文件,首行数字是账户总数,后续每行依次是账户名/PIN码/余额,需要把这些数据存入数组中。
先说说你现有代码里的几个小问题:
- 变量类型选错了:余额是小数,不能用
int,得用double;账户名是带连字符的字符串,char根本存不下,要用string - 文件打开的写法有问题,
"...是转义错误,直接写正确的文件路径字符串就行 - 没有定义合适的结构来存储账户信息,单独用多个数组不如用结构体清晰
下面是完整的实现步骤和代码:
1. 先定义账户结构体
用结构体把每个账户的三个字段打包在一起,代码可读性和维护性都会更好:
#include <iostream> #include <fstream> #include <string> using namespace std; // 封装账户的所有信息 struct Account { string name; // 账户名,比如MB-1111-1111 int pin; // PIN码,整数类型 double balance;// 余额,支持小数 };
2. 实现读取文件的函数
这个函数负责打开文件、读取账户总数、分配数组空间、逐个读取账户数据,还加了错误处理:
// 用指针引用的方式,方便在函数内给数组分配内存 int readAccts(Account*& accounts) { // 替换成你的实际文件路径,和exe同目录直接写文件名就行 ifstream accountFile("accounts.txt"); // 先检查文件能不能打开 if (!accountFile.is_open()) { cerr << "哎呀,打不开文件!请检查文件路径是否正确。" << endl; return 0; } int totalAccounts; accountFile >> totalAccounts; // 读取首行的账户总数 // 动态分配数组,因为总数是从文件读来的,没法提前定死大小 accounts = new Account[totalAccounts]; // 循环读取每一行的账户信息 for (int i = 0; i < totalAccounts; ++i) { accountFile >> accounts[i].name >> accounts[i].pin >> accounts[i].balance; } accountFile.close(); return totalAccounts; }
3. 写个主函数测试效果
可以用主函数来验证读取是否正确,记得用完动态数组要释放内存:
int main() { Account* accounts = nullptr; int accountCount = readAccts(accounts); if (accountCount > 0) { cout << "成功读取到 " << accountCount << " 个账户:" << endl; // 遍历输出所有账户信息 for (int i = 0; i < accountCount; ++i) { cout << "[" << i+1 << "] 账户名:" << accounts[i].name << " | PIN码:" << accounts[i].pin << " | 余额:" << accounts[i].balance << endl; } // 释放动态分配的内存,避免内存泄漏 delete[] accounts; } return 0; }
几个关键注意点
- 文件路径:如果你的TXT文件和编译后的exe不在同一个文件夹,一定要写完整路径,比如
"D:/myProject/accounts.txt" - 内存释放:用
new分配的数组,一定要用delete[]释放,不然会造成内存泄漏 - 类型匹配:账户名是字符串用
string,PIN是整数用int,余额是小数用double,别再搞混啦
内容的提问来源于stack exchange,提问作者Evanjbraun
相关产品推荐
相关产品推荐

