Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ txt文件将不会打开,c++;_C++_File_Fstream_Ifstream - Fatal编程技术网

C++ txt文件将不会打开,c++;

C++ txt文件将不会打开,c++;,c++,file,fstream,ifstream,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

这个程序应该将一个.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;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
伊夫斯图安;
char stuAns[20];
打开(“C:\\Users\\XXXXXXX\\Desktop\\StudentAnswers.txt”);
如果(!StuAns)
cout>stuAns[20])
计数++;
StuAns.close();
对于(int i=0;i<20;i++)
cout如果
StuAns.open()
失败,您不是在停止程序,而是在继续并尝试读取未打开的文件并输出未读数据

另外,
open()
不会告诉您失败的原因。如果需要该信息,您必须直接使用Win32 API
CreateFile()
函数,然后如果
CreateFile()
失败,您可以查询
GetLastError()

也就是说,您的代码中有几个bug:

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

  • 读取
    StuAns>>StuAns[20]
    超出了数组的范围。有效索引仅为
    0..19
    。您正在破坏内存(如果文件已成功打开)

  • 您的
    while
    循环编码错误

  • 在最后的
    for
    循环中,您需要使用
    count
    而不是
    20

试试这个:

#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;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
伊夫斯图安;
char stuAns[20]={};
整数计数=0;
打开(“C:\\Users\\XXXXXXX\\Desktop\\StudentAnswers.txt”);
如果(!StuAns.is_open())
{
cerr>stuAns[计数])
计数++;
StuAns.close();
对于(int i=0;iCUT,明确地说,不起作用?你是否得到了一个错误?什么是错误?当我测试文件是否打开时,它返回假,然后中间有两条线的一个奇怪的条形被打印20次。