www.digitalmars.com         C & C++   DMDScript  

c++.command-line - strange fscanf/console output problem

reply Jens Friese <j.friese highfisch.de> writes:
Hi,

please have a look at my problem:


I want to save random combinations of zeros and ones to a file.


[..]

// GENERATION OF RANDOM 0-1-COMBINATIONS

long int seed = time(0);
TRanrotWGenerator rg(seed);

data = fopen("strategies.txt", "w+");

for (i=0;i<h;i++) {
	for (j=0;j<10;j++) {
		indiv[i].strategy1[j]=(int)round(rg.Random()); //random
		fprintf(data,"%d\n",indiv[i].strategy1[j]);    //saving
		indiv[i].strategy2[j]=(int)round(rg.Random()); //random
		fprintf(data,"%d\n",indiv[i].strategy2[j]);    //saving
	}
}
	
fclose(data);

[..]
	
This works fine.

// CONCOLE OUTPUT IS CORRECT

0 > |0110011101| & |0101011011|
1 > |0001111011| & |1001101111|
2 > |1000000101| & |0111010000|
3 > |1010001110| & |0000111000|
4 > |1011000001| & |1011010011|
5 > |0110110000| & |1101111110|
6 > |0010110010| & |0010101011|
7 > |1111100011| & |0111000001|
8 > |0101000111| & |0100111000|
9 > |0101110111| & |1100000110|


Now I open the file again.

data = fopen("strategies.txt", "r+");
				
for (i=0;i<h;i++) {
	for (j=0;j<10;j++) {
		fscanf(data,"%d\n",&indiv[i].strategy1[j]);
		fscanf(data,"%d\n",&indiv[i].strategy2[j]);
		
		HERE IS THE PROBLEM:	
		THE FIRST STRATEGY IS READ CORRECTLY BUT THE
		FIRST THREE CHARS OF THE SECOND STRATEGY ARE
		ALLWAYS ZERO!!

		TO ADD TO THE CONFUSION:
		I KNOW THAT INSIDE THIS LOOP, THE VALUES OF
		BOTH STRATEGIES ARE CORRECT. BUT ONCE I CLOSE
		THE FILE, PART OF THE INFORMATION VANISHES???!!!???

	}
}

fclose(data);


                   VVVVVVV
		   VVVVV
		    VVV
0 > |0110011101| & |0001011011|
1 > |0001111011| & |0001101111|
2 > |1000000101| & |0001010000|
3 > |1010001110| & |0000111000|
4 > |1011000001| & |0001010011|
5 > |0110110000| & |0001111110|
6 > |0010110010| & |0000101011|
7 > |1111100011| & |0001000001|
8 > |0101000111| & |0000111000|
9 > |0101110111| & |0000000110|


I would REALLY appreciate your help.

Have a great day

Jens
Oct 01 2003
parent "Walter" <walter digitalmars.com> writes:
Try reading/writing the file in binary, use "wb+" and "rb+".
Oct 01 2003