我试图使用一个循环来读取输入文件中的数据,该循环应该在函数内的文件末尾停止。文件中的数据按如下行排列:
Zip Drive
89
Warehouse C
75.89
Keyboard
133
Warehouse C
25.95
在第四行,变量填充了一些垃圾输入,之后读取的所有内容都是空白。循环也不会结束。
int ReadData(string productName[], string productLocation[], int productQty[], double productPrice[])
{
ifstream infile;
int i = 0;
infile.open("prog1.txt");
do {
getline(infile, productName[i]);
infile >> productQty[i];
getline(infile, productLocation[i]);
infile >> productPrice[i];
i++;
} while (!infile.eof());
infile.close();
return i;
}
答案 0 :(得分:1)
infile >> productQty[i]
和infile >> productPrice[i]
语句正在读取int
/ double
个值,并在流中留下换行符,以供下一个{{1调用,这不是你想要发生的事情。
您需要:
使用std::getline()
读取每一行,然后使用std::getline()
来解析各自行中的std::istringstream
/ int
值:
double
在阅读int ReadData(string productName[], string productLocation[], int productQty[], double productPrice[])
{
ifstream infile("prog1.txt");
int i = 0;
while (getline(infile, productName[i]))
{
getline(infile, line);
istringstream(line) >> productQty[i];
getline(infile, productLocation[i]);
getline(infile, line);
istringstream(line) >> productPrice[i];
++i;
}
infile.close();
return i;
}
/ infile.ignore()
值后致电int
,以阅读和解除换行符:
double
在任何一种情况下,都必须为数组预先分配足够的元素,以容纳与文件中一样多的产品。由于代码无法实际验证该计数,我建议采用另一种更安全的方法:
int ReadData(string productName[], string productLocation[], int productQty[], double productPrice[])
{
ifstream infile("prog1.txt");
int i = 0;
while (getline(infile, productName[i]))
{
infile >> productQty[i];
infile.ignore(numeric_limits<streamsize>::max(), '\n');
getline(infile, productLocation[i]);
infile >> productPrice[i];
infile.ignore(numeric_limits<streamsize>::max(), '\n');
++i;
}
infile.close();
return i;
}