Domanda

I'm pretty sure that this is a common question, but I can't find an example similar to mine, so.. I have a text file called input.txt that has: 0.0001234 1.0005434 0.0005678 1.0023423 0.00063452 1.0001546 0.00074321 1.00017654 in it. Now I want to write a program to read that into an array, and then quickly check that it worked. So far, I've got:

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

int main ()
{
    double PA[8];
    int n;
    ifstream myfile ("input.txt");
    if (myfile.is_open())
    {
        while (! myfile.eof() )
        {
            getline (myfile,line);
            cout << PA[line]<< endl;

        }
        myfile.close();
    }
    else cout << "Unable to open file";
    for (n=0; n<8; n++) // to print the array, to check my work
    {
         cout << " {" << PA[n] << "} ";
}

    system("PAUSE");
    return 0;
}

My problem so far is that I keep getting the error: line was not declared. And I want to use the array later with floats to calculate new data. I think I'm doing it wrong for that.. Any help? Thanks!

È stato utile?

Soluzione

declare line variable

int n, line = 0;
std::string value;

proper load data:

getline (myfile,value);
PA[line] = atof(value.c_str());
cout << PA[line]<< endl;
line++;

Altri suggerimenti

the variable line here

cout << PA[line]<< endl;

is not declared. and if you declare it, you also have to give it a value, otherwise it's undefined and the PA[line] is undefined, in other words: will crash.

the entire while block seems suspicious:

while (! myfile.eof() )
{
    getline (myfile,line);
    cout << PA[line]<< endl;

}

are you sure about the getline call?

I know a getline with this signature:

ssize_t getline(char **lineptr, size_t *n, FILE *stream);

and that does not even match the number of arguments in your version.

if your input file has more than 8 lines on input, than the while loop will have that many interations - and your array has only space for 8 elements.

You need to declare the variable you called 'line' as follows:

   int i=0;

   while (! myfile.eof() && i<8)
    {
        std::string line; // this was the missing statement

        getline (myfile,line);

        double value = atof(line.c_str()); // convert line form char* to double

        PA[i++] = value;

        cout << value << endl;

    }

Note that you need to convert line as double and use increment variable 'i' (for example, as I did. Make sure not overflowing PA capacity by checking i agains the size (currently 8, which should not hard coded, btw).

Also note that you shouldn't print the result if file access failed.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top