尝试将数据保存到数组时ifstream运行时错误

时间:2013-12-17 17:52:14

标签: c++ arrays ifstream

当我尝试读取外部文本文件时遇到问题。 显示的文本是正确的,但是当将数据保存到数组中时,似乎是错误的。

我的输入数字是4 2 8 0 2 3 0 4 0 5,但是在循环通过数组后,出现[i],仅出现“48”。

#include <iostream>
#include <windows.h>
#include <fstream>
#include <string>

void begin ();
void Process (string);

using namespace std;

int main()
{   

        begin();

        system("pause");
        return 0;
}

void begin (void){

string file = "data.txt";
Process(file);      
}

void Process (string file)
{

        int i=0,ch, n = 0, temp, a[50];


        ifstream infile;
        infile.open(file.c_str());

错误似乎是由此引起的。

        if(infile.is_open())
        {

            cout << "File to be read: " << file << endl;
            cout << "\n\n";
            infile >> temp;
            while(!infile.fail())
            {
                cout << temp << " ";
                infile >> temp;
                a[i] = temp;
                i++;
                n++;
            }

        cout << "\n\n";
        cout << "This file has " << n << " numbers. \n\n";

        }

        else
            cout << "The file isn't available! \n\n";

        infile.close(); 

当我尝试输出结果时,只显示48。

        for (int z = 0; z < i; z++)
        {
            cout << a[i] << endl;

        }
}

我是新来的。请帮忙。提前谢谢。

2 个答案:

答案 0 :(得分:1)

您的显示循环正在使用i代替z来索引a(这应该是变量命名重要的一个很好的教训!)将显示循环更改为:

    for (int z = 0; z < i; z++)
    {
        cout << a[z] << endl;
    }

您的代码可能存在更多问题,但这似乎阻碍了您。考虑将ia重命名为更有意义的事情。当你花时间去理解你的意思时,打字的时间总是相形见绌。

答案 1 :(得分:0)

考虑这个循环

    for (int z = 0; z < i; z++)
    {
        cout << a[i] << endl;

    }

您总是输出一个元素a [i]而不是[z]。此外,没有分配索引为i的元素。最后分配的元素是[i-1]。

除此之外,您不会将第一个输入的数字保存在数组中。您开始保存第二个数字中输入的数据。

        infile >> temp; // <== this value was not assigned to an element of the array
        while(!infile.fail())
        {
            cout << temp << " ";
            infile >> temp;
            a[i] = temp;

此循环内的语句

            infile >> temp;

会导致错误。所以在那之后没有意义写

            a[i] = temp;

因为没有输入任何内容,实际上您会将之前的数字存储在下一个元素中。