When I run this program I can only access the first row of data. Can any one help so that I can access all the lines? I am trying to store numbers into a 2-dimensional array.

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>

using namespace std;


int main ()
{
	ifstream inData;
	float numbers[25][10];
	int rows=0,cols;
	
	inData.open("data.txt");

	while (inData){
		for (rows=0; rows<=7; rows++){
			for (cols=0; cols<=7; cols++)
			{ 
		inData >> numbers[rows][cols];
		cout<<fixed<<showpoint<<setprecision(1)<<numbers[rows][cols]<<" ";
	
			}
		cout<<endl;
		}
	
	}
	cout<<endl;
	cout<<fixed<<showpoint<<setprecision(1)<<numbers[0][1];
	
return 0;
}

Recommended Answers

All 5 Replies

How about this one? But this has the danget of writing outside the bounds of the array, so you need to add more checkiing.

rows = cols = 0;
while( infile >> numbers[rows][cols])
{
    cols++;
    if(cols > 7)
    {
        cols = 0;
        rows++;
    }
}

It looks like you have declared an array of 25 rows and 10 columns. I'd suggest you intialize the rows to their value(rows=25) and columns (cols=10). Try my example

for (i=0; i<=rows; i++)
   {
            for (j=0; j<=cols; cols++)
            { 
	         inData >> numbers[i][j];
	         cout<<fixed<<showpoint<<setprecision(1)<<numbers[i][j]<<" ";
	
            }
   }

dont forget to declare your array numbers[rows][cols]

That seems to have done it! Thanks for the help!

>> for (i=0; i<=rows; i++)

I hope you realize that is going to cause data overflow errors which might possibly crash your program or destroy other parts of your program if that code is incorporated into a larger program. Why? Because the loop performs one too many iterations -- if the value of rows is 25 then the above loop will count from 0 to 26, which is one too many. Same with the inner j loop.

What you want is this: for (i=0; i < rows; i++) Then there is the danger that the data file doesn't contain that many numbers (rows * columns).

>> for (i=0; i<=rows; i++)

I hope you realize that is going to cause data overflow errors which might possibly crash your program or destroy other parts of your program if that code is incorporated into a larger program. Why? Because the loop performs one too many iterations -- if the value of rows is 25 then the above loop will count from 0 to 26, which is one too many. Same with the inner j loop.

What you want is this: for (i=0; i < rows; i++) Then there is the danger that the data file doesn't contain that many numbers (rows * columns).

Thanks for the correction. I happened to have edited the OP's code without putting in mind the the syntax...I meant to pass on the logic

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.