0

打开文件并读取其内容的简单程序。然后在最后进行测试,看看我是否确实得到了信息。每次我运行它时,它都会告诉我它无法打开文件。我将在下面发布 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
4

2 回答 2

3

您正在使用 以输出模式打开流ios::out。用于ios::in从中读取。

你还有很多其他的问题。IE:

-if(!slips.eof())文件打开后总是会导致退出,除非文件为空。
- 在您的 while 循环中,您(可能不小心)尝试使用<<. 用于>>从流中读取和<<写入。

于 2013-07-26T01:33:56.887 回答
0

你有两个问题:

您正在打开文件以进行输出(写入)

slips.open("SaleSlips.txt", ios::out);

改为用于ios::in输入(阅读)

slips.open("SaleSlips.txt", ios::in);

接下来,您将立即测试!eof(),这是错误的逻辑。

if(!slips.eof())

打开文件进行输入时,您不想在。是。首次打开文件进行输入时,您希望位于文件的开头;在是一件坏事。如果为真,则您的代码应该出错,而不是如果它是假的:eof()eof()end of fileeof()eof()

if(slips.eof()) {
  // It's an error if we're starting at eof()
}
于 2013-07-26T01:43:56.807 回答