【问题标题】:Reading from a file, and looping over the file to write to an array从文件中读取,并循环文件以写入数组
【发布时间】:2019-12-11 23:10:21
【问题描述】:

我正在编写一个银行程序来练习我的 C++ 技能,但我一直在读/写文件。我正在将一些基本信息(姓名、帐号、密码、余额)存储到一个文件中,并且希望能够在我打开程序的任何时候从该文件中读取。我做了一个简单的类叫做客户端:

class client
{
public:
int acctNum;
string firstName;
string lastName;
float balance;
int pin;
}

我将信息保存到按帐号、密码、名字、姓氏和余额格式化的 txt 文件:

1 88 Doug Dimmadome 5

我在输入文件上的循环只读取帐号,并且连续不断地这样做(inFile 是我的 ifstream 的变量名,clientList 是我的一组客户端的变量名):

while (!inFile.eof()) {
    inFile >> acc;
    cout << acc << endl;
    clientList[acc].acctNum = acc;
    inFile >> clientList[acc].pin;
    inFile >> clientList[acc].firstName;
    inFile >> clientList[acc].lastName;
    inFile >> clientList[acc].balance;
}

我在循环中做错了什么,导致它无法正确循环文件中的所有数据?

--------编辑------ 我正在添加我的变量声明并打开我的文件:

client clientList[maxClients];
client currTrans;
int choice = NULL;
char atm = 'y';
ifstream inFile;
ofstream file;
const string fileName = "clientList.txt";
int acc;


inFile.open(fileName);
if (!inFile.is_open()) {
    cout << "File could not open.";
    return 1;
}

还有我的客户端构造函数:

client::client() {
acctNum = NULL;
firstName = "";
lastName = "";
balance = NULL;
pin = NULL;

}

【问题讨论】:

  • 我看不到你在哪里创建clientList[acc]... clientList 的类型是什么?你试过调试吗?发生了什么,而不是你所期望的?文件中是否有人姓名超过 2 个?
  • 这很可能是由于未能正确检查输入流的错误状态造成的。你的调试器显示什么?如果您不知道如何使用调试器,这是一个学习如何使用它一次一行地运行程序并了解会发生什么的好机会。知道如何使用调试器是每个 C++ 开发人员必备的技能,没有例外。在调试器的帮助下,您应该能够快速找到此程序以及您编写的所有未来程序中的所有错误,而无需向任何人寻求帮助。
  • @Ya_Boi 您能否也将数组 clientList 的内容以及您如何在问题中创建 ifstream inFile ?

标签: c++ file


【解决方案1】:

我想我是通过 @Sam Varshavchik 和 @PaulMcKenzie 的组合来解决的:

  • 我使用调试器找出程序出错的地方,它不断读取同一行,因此无处可退出循环。
  • 我更改了检测结束文件的方式,列出了两次帐号并检查以确保在每个循环中都读取了一条新数据:

    while (**inFile >> beg**) {
        inFile >> acc;
        cout << acc << endl;
        clientList[acc].acctNum = acc;
        inFile >> clientList[acc].pin;
        inFile >> clientList[acc].firstName;
        inFile >> clientList[acc].lastName;
        inFile >> clientList[acc].balance;
    }
    

所以现在我的文本文件中的数据如下所示:

1
1 22 Doug Dimmadome 300
2
2 66 Dif Difadif 400
34
34 123 Mike Wasowski 666
44
44 67 Dale Dalers 600
99
99 44 Mitch Turtle 0.02

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    相关资源
    最近更新 更多