0

Can some one help me to :

How to Read integers stored in a text file in the following format :

26 52 23 41 19 61 54 4 19 95 84 25 55 22 
(integers delimted by a space.)

to be used for sorting later.

Have tried following code:

#include <stdio.h>
#include <conio.h>

void main()
{
        FILE *fp;
        int *x,i=0;
        int a,b;

        fp=fopen("file1.txt","r");
        if (fp==NULL)
        {
                printf("File Cannot be opened.\n");
        }
        fseek(fp,0L,2);
        a=ftell(fp);
        rewind(fp);
        fseek(fp,+1,0);
        b=ftell(fp);
        while (b<a)
        {
                fscanf(fp," %d ",x[i]);
                printf ("%2d - %d\n",i,x[i]);
                ++i;
                b=ftell(fp);
                //printf("ftell = %d y = %d\n",b,a); 
        }
        fclose(fp);       


}

Output (which is wrong, which is obvious):

 0 - 1735
 1 - 11552
 2 - 12576
 3 - 13111
 4 - 2613
 5 - 12576
 6 - 11552
 7 - 12576
 8 - 13617
 9 - 12853
10 - 8202
11 - 8242
12 - 8237
13 - 12849

Please help.

Manish

Edited by mike_2000_17: Fixed formatting

2
Contributors
1
Reply
2
Views
9 Years
Discussion Span
Last Post by Narue
0

Rule 1) A pointer isn't an array. Just because you say int *x doesn't mean you can immediately use x as if it were an array. You need to allocate memory to it first.

Rule 2) main returns int.

Rule 3) Don't try to use the file positioning functions until you actually know what you're doing. Just read from the file and everything will work.

It's really as simple as this:

#include <stdio.h>

int main ( void )
{
  FILE *in;
  int list[50];
  int i;

  in = fopen ( "file1.txt", "r" );

  if ( in != NULL ) {
    for ( i = 0; i < 50; i++ ) {
      if ( fscanf ( in, "%d", list[i] ) != 1 )
        break;
    }

    for ( j = 0; j < i; j++ )
      printf ( "%d - %d\n", j, list[j] );

    fclose ( in );
  }

  return 0;
}

If you want the list to grow indefinitely to meet the contents of the file, you have no choice but to allocate and resize the memory for a pointer manually (assuming you really are using C even though you posted in the C++ forum).

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.