从C ++中的文本文件中读取数字数据

时间:2014-08-24 07:13:40

标签: c++ file-io

这是需要编写代码来从文件中读取数据的程序。该文件看起来像:

1234 200.55
5678 1234.56
9876 2.33

我需要将第一个号码存储为帐号,将第二个号码存储为帐户余额。

#include<iostream>
#include<fstream>
using namespace std;

const int MAX_NUM=100;
int read_accts(int acctnum[], double balance[], int max_accts);

int main()
{
    int acctnum[MAX_NUM];
    double balance[MAX_NUM];
    int max_accts=0;
    int num_accts;

    num_accts = read_accts(acctnum,balance,max_accts);

    return 0;  
}

int read_accts(int acctnum[],double balance[],int max_accts)
{
    ifstream infile;
    infile.open("information");

    while (infile >> acctnum[max_accts] && max_accts < MAX_NUM)
    {
        infile >> balance[max_accts];
        max_accts++;
    }
    for (int i=0; i<=max_accts; i++)
    {
        cout << acctnum[i]<<endl;
        cout << balance[i]<<endl;
    }
    infile.close();  
    return max_accts;
}

该程序的输出是

0
0

它应该与文本文件相同。它不应该是0和0。

提前致谢任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:4)

首先,您在每个阵列中打印了太多元素。打印循环应该从0到max_accts(不包括),如下所示:

 for (int i=0; i < max_accts; i++)

现在,由于您正在尝试读取名为“information”的文件,因此我使用您的问题中描述的内容创建了此类文件并运行了您的代码。我得到的输出是:

1234
200.55
5678
1234.56
9876
2.33

这看起来像你想要的(而不是零),所以你的代码似乎工作正常。也许你没有打开正确的文件?

将文件名从“信息”更正为其他内容,或者确保在当前工作目录中有一个名为“information”的文件。

答案 1 :(得分:0)

对于程序的文件部分,下面的代码将是您的函数的更好版本。它使用文件结束并且能够处理文件不退出

int read_accts(int acctnum[], double balance[], int max_accts)
{
    ifstream infile;
    infile.open("information");

    if (!infile)//check if file exists
    {
        //add code to handle missing file here
    }
    while (!infile.eof())
    {
        infile >> acctnum[max_accts];
        infile >> balance[max_accts];
        max_accts++;
    }
    infile.close();
    return max_accts;
}

答案 2 :(得分:-1)

如何将旧学校stdio API用于这样的简单任务?:

int accounts[3], i;
float balance[3];
FILE *fp = fopen("file.txt", "r");
for (i = 0; i < 3; i++)
   fscanf(fp, "%d %f", &account[i], &balance[i]);
fclose(fp);