可视C++ - 无法打开文本文件

Visual C++ - Cannot open text file

本文关键字:文本 文件 C++ 可视      更新时间:2023-10-16

打开文件并读取其内容的简单程序。然后在最后进行测试,看看我是否真的得到了信息。每次我运行它时,它都会告诉我它无法打开文件。我将在下面发布销售单的内容。为什么不打开文件?它还尝试在每次运行时删除该文件。

#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
您使用

ios::out 在输出模式下打开流。 使用ios::in从中读取。

你还有很多其他问题。 即:

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

您有两个问题:

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

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()
}