打开文件并阅读其内容的简单程序。然后在最后进行测试,看看我是否确实得到了这些信息。每次我运行它告诉我它无法打开文件。我将在下面发布SaleSlips的内容。为什么不打开文件?它也试图在每次运行时删除文件。
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
struct SaleSlip{
char name[20];
int prodID;
double value;
};
void main(){
fstream slips;
SaleSlip sales[17];
slips.open("SaleSlips.txt", ios::in);
if(slips.eof()){
cout << "Cannot open file - SaleSlips.txt"<< endl;
system("pause");
exit(2);
}
int i = 0;
while(!slips.eof()){
slips.getline(sales[i].name, ' ');
slips >> sales[i].prodID;
slips.ignore(5, ' ');
slips >> sales[i].value;
slips.ignore(80, ' ');
i++;
}
cout << sales[1].value;
slips.close();
system("pause");
}
Eric 1 200000.00
Sookie 2 200.00
Sookie 4 200.50
答案 0 :(得分:3)
您正在使用ios::out
以输出模式打开流。使用ios::in
从中读取。
你也有很多其他问题。 IE:
- 文件打开后if(!slips.eof())
将始终导致退出,除非文件为空
- 在while循环中,您(可能是偶然)尝试使用<<
将prodID和值写入slip文件。使用>>
从流中读取,并<<
写入。
答案 1 :(得分:0)
你有两个问题:
您正在打开输出(写入)文件
slips.open("SaleSlips.txt", ios::out);
使用ios::in
代替输入(阅读)
slips.open("SaleSlips.txt", ios::in);
接下来,您将立即测试!eof()
,这是错误的逻辑。
if(!slips.eof())
打开输入文件时, 想要eof()
。 eof()
是end of file
。首次打开文件进行输入时,您希望位于文件的开头;在eof()
是一件坏事。如果eof()
为真,则代码应该出错,而不是错误:
if(slips.eof()) {
// It's an error if we're starting at eof()
}