gpt4 book ai didi

c++ - 读取文件中的最后一行(C++ 中的文件处理)

转载 作者:行者123 更新时间:2023-11-30 02:36:22 34 4
gpt4 key购买 nike

我正在阅读 .txt 文件中的行。我在最后一行遇到了问题。它不会读它。我使用了 eof() 这不是一个好习惯。所以我尝试使用读取部分作为我循环的参数。

这里是:

void browse(int accNum)
{
int acnum,pin;
float bal;
string fname,lname;

ifstream file;
file.open("acc.txt",ios::in);

if(file.is_open())
{
while(file>>acnum>>pin>>fname>>lname>>bal)
{
if(acnum==accNum)
{
cout<<"ACCOUNT NUMBER: "<<acnum<<"\nNAME: "<<fname<<" "<<lname<<"\nBALANCE: "<<bal;
break;
}
else
{
cout<<"ERROR";
}

}
}
else
{
cout<<"FILE NOT OPEN";
}
file.close();
}

我已将其更改为 while((file >> acnum >> pin >> fname >> lname >> bal) != NULL)。它仍然无法正常工作。解决方案是什么? 这是数据库的内容:

   1111111111 4324 James Doe 300000
2222222222 0123 Eric Doe 10000
1234567899 1234 John Doe 444444

最佳答案

您的文件格式(空格分隔值?)已损坏。您不能区分名称条目的结尾。 std::cin 将在下一个空格处停止,因此可能会撕裂名称。读取以下余额将失败,因为它实际上仍然是名称的一部分。有些名称包含的空格比您预期的要多,例如,Guido van Rossum。您应该使用 ';''\t' 作为分隔符,并使用 getline 和 stringstream 进行读取。

此外,您不应使用 float 来表示货币,因为这种表示方式本身就不准确。考虑这个片段:(另请查看我在下面放置的链接以进一步阅读。)

#include <iostream>
#include <iomanip>
int main() {
float f = 123456789;
// prints 123456792.000000
std::cout << std::fixed << f << '\n';
}

最后,as a commenter has observed,您需要确保使用足够大的整数类型来保存帐户 ID。当您不希望出现负值时,也可以考虑使用 unsigned 整数类型,例如 unsigned long long intuint64_t。请注意,当您忽略帐户 ID 的数字属性并将其存储为字符串时,生活可能会更轻松。

进一步阅读:

关于c++ - 读取文件中的最后一行(C++ 中的文件处理),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32900974/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com