C++ 最好使用getline或cin从输入文件填充数组?

C++ 最好使用getline或cin从输入文件填充数组?,c++,fstream,C++,Fstream,我的问题可能是这里的索引或语法。我正在尝试填充两个 数组名称[]和共享输入文件中的[] 程序的一半,手动输入,工作正常。每次尝试fstream一半 已打印了一个空输出表,其中包含-1.#IND的百分比 股东 我已经尝试了cin>>name>>share,getline(shareFile,name),而(shareFile>>name>>share){…name[I]=name;shares[I]=share;,但是 我不知道如何正确使用getline,所以我正在使用第一个。正如我所说, 我不知

我的问题可能是这里的索引或语法。我正在尝试填充两个
数组
名称[]
共享输入文件中的[]

程序的一半,手动输入,工作正常。每次尝试fstream一半
已打印了一个空输出表,其中包含
-1.#IND
的百分比
股东

我已经尝试了
cin>>name>>share
getline(shareFile,name)
而(shareFile>>name>>share){…name[I]=name;shares[I]=share;
,但是 我不知道如何正确使用getline,所以我正在使用第一个。正如我所说,
我不知道这是我的索引还是这里的代码有问题

这就是(我相信)问题所在的功能,但也许它只是没有以正确的方式传递信息

void getFileInputs(string names[], int shares[], int size)
{
    string file;
    string name;
    int share = 0;
    bool isOpen = true;
    ifstream shareFile("inputfile.txt");

    cout << "*----------------------------------*\n"
        << "*     Input From File:             *\n"
        << "*----------------------------------*\n";
    cout << "Please enter the name of the file (.txt): ";
    cin >> file;
    cout << "\n";

    shareFile.open("inputfile.txt");

    if(file == "inputfile.txt" || file == "inputfile")
    {
        int i = 0;
        do{

        for(i = 0; i < size; i++)
            {
                shareFile >> names[i] >> shares[i];
            }

        if(shareFile.eof())
        {
            isOpen = false;
        }
    }while(isOpen == true && shareFile >> name >> share);
    }
    else
    {
        cout << "Unrecognized file name. \n" << endl;
        isOpen = false;
    }
}
void getFileInputs(字符串名称[],整数共享[],整数大小)
{
字符串文件;
字符串名;
int share=0;
布尔等参=真;
ifstream共享文件(“inputfile.txt”);
cout>股份[i];
}
if(shareFile.eof())
{
isOpen=假;
}
}while(isOpen==true&&shareFile>>name>>share);
}
其他的
{

cout直接的问题是以下代码行:

shareFile.open("inputfile.txt");
上面几行,当您构建
shareFile
对象时,您使用文件名打开了它,但没有关闭它。对已打开的文件流调用
open()
,会在文件流的错误掩码中设置错误。因此,在从流中清除错误之前,任何执行输入的尝试都将失败

此外,由于
file
是该文件的名称,因此我假设您打算用该名称打开该文件。如果是,则应将上述内容更改为:

std::ifstream shareFile; // default-construct; no file is opened yet
// ...
shareFile.open(file.c_str()); // open it with the value of user-input
另一个问题是循环以及如何将文件中的值分配给数组
loop。此外,如果
shareFile
到达流的末尾,则循环将终止;因此没有理由使用布尔
isOpen
变量:

for (int i = 0; shareFile >> name >> share; ++i)
{
    // ...
}
现在,一旦成功地将值放入
name
share
中,就可以将它们分配给数组中的值:

for (int i = 0; shareFile >> name >> share; ++i)
{
    names[i] = name; shares[i] = share;
}

您能显示输入文件的外观吗?@R Sahu:我的示例输入看起来像“name1 share1(linebreak)name2 share2(linebreak)…”等等。我不知道如何格式化注释,但是(linebreak)s不在实际文件中。分配只是说程序必须从用户或输入文件中获取输入。由于没有输入文件的示例,我假设它只有名称和共享,因为它必须有一个只获取名称[arrSize]和共享[arrSize]的函数作为参数。请将示例输入文件添加为帖子的一部分。