【问题标题】:C++ Homework: Parallel Arrays from text fileC++ 作业:来自文本文件的并行数组
【发布时间】:2011-02-24 06:00:29
【问题描述】:

我必须从一个文本文件中加载三个数组来完成作业,但我不知道为什么它不起作用。这是文本文件的样子:

Jean Rousseau  
1001 15.50
Steve Woolston
1002 1423.20
Michele Rousseau
1005 52.75
Pete McBride
1007 500.32

在一行是一个名称,然后是一个 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();
}

这是我输出所有项目时添加到数组中的内容...

让·卢梭
1001
0

-1
3.76467e-039

36
3.76457e-039

0
6.57115e-039

7736952
8.40779e-045

7736952
0

【问题讨论】:

    标签: c++ arrays parallel-processing


    【解决方案1】:
    inFile >> idsAr[indexCount];
    inFile.ignore(1000, '\n');
    

    您从该行读取第一个数字,然后忽略该行末尾的所有字符,包括第二个数字。然后,您尝试读取下一个名称,就好像它是一个数字一样,并且由于您没有进行任何错误检查,所以一切都出错了。

    这个ignore 完全没有必要:在第一个和第二个数字之间没有什么可以忽略的,因为&gt;&gt; 将跳过任何前导空格。第二个ignore 是必要的,因为在使用getline 读取下一个名称行之前,您必须跳过数字行末尾的换行符。您可能更容易只使用getline 从文件中读取数据,然后使用stringstream 解析数字行。将格式化提取 (&gt;&gt;) 与基于行的提取混合起来可能很难做到。

    在任何输入操作之后,您必须检查流的状态以确保没有发生错误。举个简单的例子:

    if (!(inFile >> idsAr[indexCount]) {
        /* input failed; handle error as appropriate */
    }
    

    一个流有许多状态标志,当提取失败时,fail 标志被设置并且必须在您继续使用流之前清除。

    【讨论】:

      猜你喜欢
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 2020-02-04
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多