txt文件无法打开,c ++

时间:2018-04-16 22:26:25

标签: c++ file fstream ifstream

该程序应该将.txt文件读入数组,我不知道它是否与文件路径或代码有关。 X&只是我用户名的占位符。我知道我可以将文件放在项目文件中,但我需要从计算机中取出它。任何帮助,将不胜感激!

#include<iostream>
#include<iomanip>
#include<fstream>
using namespace std;

int main()
{
ifstream StuAns;
char stuAns[20];

StuAns.open("C:\\Users\\XXXXXXX\\Desktop\\StudentAnswers.txt");
if (!StuAns)
    cout << "ERORR: File did not open\n";

while (int count = 0 < 20 && StuAns >> stuAns[20])
        count++;

StuAns.close();

for (int i = 0; i < 20; i++)
    cout << stuAns[i];

return 0;
}

1 个答案:

答案 0 :(得分:2)

如果StuAns.open()失败,您不会停止您的程序,您将继续尝试从未打开的文件中读取并输出未读数据。

另外,open()并没有告诉你它为什么失败了。如果您需要该信息,则必须直接使用Win32 API CreateFile()函数,然后如果GetLastError()失败,您可以查询CreateFile()

话虽如此,您的代码中有几个错误:

  • StuAns[]包含未初始化的数据,这是您最终在最终for循环中看到输出的内容。

  • 读取StuAns >> stuAns[20]超出了数组的范围。有效索引仅为0..19。你正在捣乱记忆(如果文件成功打开)。

  • 您的while循环编码错误。

  • 您需要在最终的count循环中使用20代替for

试试这个:

#include <iostream>
#include <iomanip>
#include <fstream>

using namespace std;

int main()
{
    ifstream StuAns;
    char stuAns[20] = {};
    int count = 0;

    StuAns.open("C:\\Users\\XXXXXXX\\Desktop\\StudentAnswers.txt");
    if (!StuAns.is_open())
    {
        cerr << "ERROR: File did not open\n";
        return -1;
    }

    while (count < 20 && StuAns >> stuAns[count])
        count++;

    StuAns.close();

    for (int i = 0; i < count; ++i)
        cout << stuAns[i] << "\n";

    return 0;
}