Mic*_*ael 1 c++ arrays parallel-processing
我必须从文本文件加载三个数组作为家庭作业,我无法弄清楚它为什么不起作用.这就是文本文件的样子:
Jean Rousseau
1001 15.50
Steve Woolston
1002 1423.20
Michele Rousseau
1005 52.75
Pete McBride
1007 500.32
Run Code Online (Sandbox Code Playgroud)
它是一行上的名称,然后是由空格分隔的下一行的id号和余额.
这是我导入数据的功能:
void InputFromFile(string fileName, int sizes, string namesAr[],
int idsAr[], float balancesAr[])
{
// Variables
int indexCount;
ifstream inFile;
// Initialize
indexCount = 0;
inFile.open(fileName.c_str());
while(inFile && indexCount < sizes)
{
getline(inFile, namesAr[indexCount]);
inFile >> idsAr[indexCount];
inFile.ignore(1000, '\n');
inFile >> balancesAr[indexCount];
inFile.ignore(1000, '\n');
indexCount++;
}
inFile.close();
}
Run Code Online (Sandbox Code Playgroud)
这是我输出所有项目时添加到数组中的内容...
Jean Rousseau
1001
0
-1
3.76467e-039
36
3.76457e-039
0
6.57115e-039
7736952
8.40779e-045
7736952
0
inFile >> idsAr[indexCount];
inFile.ignore(1000, '\n');
Run Code Online (Sandbox Code Playgroud)
您从该行读取第一个数字,然后忽略所有字符,直到该行结束,包括第二个数字.然后,您尝试读取下一个名称,就好像它是一个数字一样,并且因为您没有进行任何错误检查,所以一切都会出错.
这ignore完全没必要:第一个和第二个数字之间没有什么可以忽略的,因为它>>会跳过任何前导空格.第二个ignore 是必要的,因为在getline用于读取下一个名称行之前,您必须跳过数字行末尾的换行符.您可能更容易仅使用getline从文件中读取数据,然后使用a解析数字行stringstream.将格式化的extract(>>)与基于行的提取混合可能很难正确.
在任何输入操作之后,您必须检查流的状态以确保没有发生错误.举个简单的例子:
if (!(inFile >> idsAr[indexCount]) {
/* input failed; handle error as appropriate */
}
Run Code Online (Sandbox Code Playgroud)
流有许多状态标志,当提取失败时,fail标志已设置,必须先清除才能继续使用流.