gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:00:09 34 4
gpt4 key购买 nike

我的问题可能出在索引或我的语法上。我正在尝试填充两个
来自输入文件的数组 names[]shares[]

程序的一半,手动输入,工作正常。每次尝试 fstream 一半
已经用 -1.#IND 打印了一个空的输出表,用于每个
股东。

我试过 cin >> name >> sharegetline(shareFile, name)while(shareFile >> name >> share){ 。 .. 名字[i] = 名字; 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;
}
}

最佳答案

直接的问题是下面这行代码:

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

另一个问题是循环以及如何将文件中的值分配给数组。首先,您不应使用 do {} while(),而应使用 for() 循环。此外,如果 shareFile 到达流的末尾,则循环将终止;因此没有理由使用 bool 型 isOpen 变量:

for (int i = 0; shareFile >> name >> share; ++i)
{
// ...
}

现在,一旦值被成功放入nameshare 中,您就可以将它们分配给数组中的值:

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

关于c++ - 最好使用 getline 或 cin 从输入文件填充数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22600058/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com