I'm having a ton of trouble reading the text from a file into an integer array, the file contains 3 lines of 1,000 integers from 0 to 1. The array is myArray[3][1000]. So far I've tried to use a stringstream to no avail and I've attempted to use a few other methods based on examples from the net but none of them seem to work, they tend to wind up reading all 0's. Please be gentle, I've only been working in C++ for 6 days now, and prior to that I hadn't programmed for about 7 years (and that was in assembly and VB).

Edit: myArray is global, this is just one of the functions within the program

Current attempt:

void readArray() 
{ 

int amountRead = 0;

ifstream in("output.txt",ios::in);
	while(in>>myArray[0][amountRead]&& amountRead < 1000)
	{

	amountRead++;
	
	}
	amountRead = 0;
	while(in>>myArray[1][amountRead ]&& amountRead < 1000)
	{

	amountRead++;

	}
	amountRead = 0;
	while(in>>myArray[2][amountRead ]&& amountRead < 1000)
	{

	amountRead++;

	}
}
Re: Trying to read a file into an integer array 80 80

I'm having a ton of trouble reading the text from a file into an integer array, the file contains 3 lines of 1,000 integers from 0 to 1.

I don't suppose you could attach the input file? And what do you mean by "integers from 0 to 1"? Just a bunch of ones and zeros? Or floating point values?

Edit: myArray is global, this is just one of the functions within the program

Show it's declaration.

Re: Trying to read a file into an integer array 80 80

The input file is random 1's and 0's, I've attached to code to the entire program in case this will help.

#include "stdafx.h"
#include <iostream>
#include <fstream>	
#include <time.h>
#include <string>
#include <sstream>
using namespace std;

int myArray[3][1000], flag = 1;


void generateArray()
{
int i;
srand( time(NULL) );

for(int j=0;j<3;j++)
{
for (i = 0; i < 1000; i++)	myArray[j][i] = rand() % 2;
}

cout << "Array has been generated" << endl;

}

	void saveArray()
	{
		ofstream output("output.txt");

		for(int j=0;j<3;j++)
		{
			for(int i=0;i<1000;i++) output<<myArray[j][i];
		}

		output.close();
	}


void readArray() 
{ 

int amountRead = 0;

ifstream in("output.txt",ios::in);
	while(in>>myArray[0][amountRead]&& amountRead < 1000)
	{

	amountRead++;
	
	}
	amountRead = 0;
	while(in>>myArray[1][amountRead ]&& amountRead < 1000)
	{

	amountRead++;

	}
	amountRead = 0;
	while(in>>myArray[2][amountRead ]&& amountRead < 1000)
	{

	amountRead++;

	}
}

void genAppendArray()
{
	generateArray();

	ofstream output;
	output.open("output.txt", ios::out |ios::app);
	
output<<endl;

	
for(int j=0;j<3;j++)
{
	for(int i=0;i<1000;i++) output<<myArray[j	][i];
}

	output.close();

}

void showMenu()
{
int choice;

cout << "Choose an option:" << endl << "1. Generate a random 3x1000 array of entries from 0-1." << endl 
	<< "2. Save array to a file" << endl << "3. Read array from a file." << endl << "4. Generate array and append it to a file."
	<< endl << "5. Quit." << endl << endl;	
	
	cin >> choice;

switch (choice) 
{
case 1:
generateArray();
break;

case 2:
saveArray();
break;

case 3:
readArray();
break;

case 4:
genAppendArray();
break;

case 5:
flag = 0;
break;
}
}

int main () 
{
	while (flag > 0)
	{
	cout << endl; 
	showMenu ();
	}
	return 0;
}
Re: Trying to read a file into an integer array 80 80

Consider separating the 1's and 0's with whitespace.
Otherwise, you may need to read each character as a char and convert to its equivalent digit.

Re: Trying to read a file into an integer array 80 80

Consider separating the 1's and 0's with whitespace.
Otherwise, you may need to read each character as a char and convert to its equivalent digit.

the file contains 3 lines of 1,000 integers. That will be a waste of time
if you want to separate each int with white spaces.

just read it as a char, like he suggested. Then subtract '0' from it
to get the int value. Something like this :

char c;
ifstream iFile("num.txt");
int i = 0;
while(iFile.get(c) && i < 1000)
{
     int num =  c - '0';
    myArray[0][i] = num;
     i++;
}
Re: Trying to read a file into an integer array 80 80

It works! I'm using:

void readArray() 
{ 

char c;
ifstream iFile("output.txt");
int i = 0;
while(iFile.get(c) && i < 1000)
{
     int num =  c - '0';
    myArray[0][i] = num;
     i++;
}
i = 0;
while(iFile.get(c) && i < 1000)
{
     int num =  c - '0';
    myArray[1][i] = num;
     i++;
}
i = 0;
while(iFile.get(c) && i < 1000)
{
     int num =  c - '0';
    myArray[2][i] = num;
     i++;
}

Thanks for all your help, I greatly appreciate it.

Be a part of the DaniWeb community

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