Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Loading a File in C++

  1. Dec 6, 2004 #1
    Loading a File in C

    Ok here is my code:

    Code (Text):

    FILE  *fReadOpen( void )
    /*
        purpose: open file for reading
        goal state: fReadOpen returns pointer to file
    */
    { /* begin fReadOp */
      /* data object declarations */
        char  FileName[80];  /* input file name */
        FILE  *pInFile;  /* file pointer */
        int  NoSuchFile;  /* logical check for FileName existence */

      /* algorithm */
         printf( "\nPlease enter the file name to open for reading.\n ==> " );
         do
            { /* get FileName */
                 fflush( stdin );
                 scanf( "%[^\n]", FileName );
                 fflush( stdin );
              /* check for existence */
                 NoSuchFile = ( (pInFile = fopen( FileName, "r" ) ) == NULL );
              /* print message if file not found */
                 if  ( NoSuchFile )
                    { /* begin if NoSuchFile */
                         printf( "\n%s not found."
                                    "\nPlease input valid file name.\n ==> ", FileName );
                    } /* end if NoSuchFile */
            }
         while  ( NoSuchFile );
           
         return( pInFile );

    } /* end fReadOpen */

    //********************************************************************
    void get_data( double input_val[], int *parray_int)
    /*
        purpose: continue on with file opening process
        goal state: return an array with via the point array_int
    */
    {    // begin get_data
        // variable dictionary
        double aquire;       // being read by fscanf
        double value = 0;     // "value" for the fscanf statement
        FILE   *pInfile;       //  file from above function
       
        // algorithm
            // open file for reading
                pInfile = fReadOpen();

            // loop for reading values
               
                *parray_int = 0;
                do
                {
                    aquire = fscanf(pInfile,"%f", &value);
                    if (aquire == 1)
                    {
                        input_val[*parray_int] = value;
                        *parray_int = *parray_int + 1;
                    }
                } while (aquire == 1);

                // close file
                fclose( pInfile );

    }   // end get_data

    Yeah I know its on the large size but i'm kinda confused. My professor gave us that whole File loading thing,a nd i created a data file from notepad. When i run to the program It just sits there and does nothing. So i started to debug and added printf's in those lines. the last line that the printf worked on was the one prior to the return statement, now perhpas my data format is incorrect, but i'm pretty sure i'm straight with that. Does anyone have any Ideas?
     
    Last edited: Dec 6, 2004
  2. jcsd
  3. Dec 6, 2004 #2
    Where's main()?
     
  4. Dec 6, 2004 #3
    it's up a little bit.. i only posted those two functions... here is the rest: to that point

    Code (Text):
     
    main()
    { // begin main
      // variable declarations
         double input_val[N];       // input values
         int array_int;            // number of input values
         int ave;                 // average
         int median;             // median
         int variance;          // Valance
         int std_dev;          // Standard Deviation

      // algorithm
            displayheader();
            get_data( input_val, &array_int);
            sort_data(input_val, array_int );
            calculations( input_val, array_int, &ave , &median, &variance, &std_dev);
            display(input_val, array_int, ave , median, variance, std_dev);
      // display end of program message
        printf("\n\n***** End of program\n***** ");

        return (0);

    } // end main

    //********************************************************************
    void  displayheader( void )
    I edited out my header file for securit reasons... o:)
     
  5. Dec 6, 2004 #4

    dduardo

    User Avatar
    Staff Emeritus

    Right now your doing file i/o the C way. If your looking to do it the C++ way you'll want to something like this:

    Code (Text):


    #include <iostream>
    #include <fstream>

    using namespace std ;

    int main( int argc , char **argv) {

    int field1, field2, field3 ;

    ifstream infile("file.in") ;

    while( !infile.eof() ) {
       infile >> field1 >> field2 >> field3 ;
       cout << field1 << field2 << field3 << endl ;
    }

    return 0;

    }


     
     
  6. Dec 6, 2004 #5
    Well it needs to be C then, sorry for the miss leading title. This is what my professor wants us to use.
     
  7. Dec 6, 2004 #6

    dduardo

    User Avatar
    Staff Emeritus

    Did you enter a proper filename for the input file which should be in the current directory of the executable file?
     
  8. Dec 6, 2004 #7

    dduardo

    User Avatar
    Staff Emeritus

    Something like this should work:

    Code (Text):

    #include <stdio.h>
    #include <stdlib.h>

    int main( int argc , char **argv ) {

    FILE *infile ;

    infile = fopen( "testin" , "r" ) ;

    int field1, field2, field3 ;

    if( infile == NULL ) {
            printf("Error Reading File\n") ;
            exit(0) ;
    }

    while( fscanf( infile , "%i %i %i\n" , &field1, &field2, &field3 ) != EOF ) {
            printf( "Field1: %i\nField2: %i\nField3: %i\n\n" , field1, field2, field3) ;
    }

    fclose( infile ) ;

    return 0 ;

    }
     
     
    Last edited: Dec 6, 2004
  9. Dec 6, 2004 #8
    Yeha i'm pretty sure cause i typed in differt ones and it was very quick to find out it was not there. When i type din the proper extentions it just sat there and didn't do anything. Also I just took your code and compiled it( with a few minor changes), and it worked well, but it gonna be hard to interigrate it into my current code. Also liek everyone else got it to work and I'm pretyt sure there are not this many problems.

    I'm just kinda fustrated, i can't use this code.
     
    Last edited: Dec 6, 2004
  10. Dec 6, 2004 #9

    dduardo

    User Avatar
    Staff Emeritus

    The thing that is bugging me is the aquire variable. Your setting its value through fscanf, but you never check for EOF. Put some printf statements inside of the do while loop and see what happens.
     
  11. Dec 6, 2004 #10
    I did... and they all displayed. I did that before I posted. Even As i said the only one that didn't display was the one after the Return xxxxx...
     
  12. Dec 6, 2004 #11

    dduardo

    User Avatar
    Staff Emeritus

    What do you mean by "the one after the Return xxxxx..."?
     
  13. Dec 6, 2004 #12
    Code (Text):

      /* algorithm */
         printf( "\nPlease enter the file name to open for reading.\n ==> " );
         do
            { /* get FileName */
                 fflush( stdin );
                 scanf( "%[^\n]", FileName );
                 printf( "crap2");
                 fflush( stdin );
              /* check for existence */
                 NoSuchFile = ( (pInFile = fopen( FileName, "r" ) ) == NULL );
                 printf( "crap3");
              /* print message if file not found */
                 if  ( NoSuchFile )
                    { /* begin if NoSuchFile */
                         printf( "\n%s not found.");
                        printf( "crap4");
                        printf( "\nPlease input valid file name.\n ==> ", FileName );
                    } /* end if NoSuchFile */
            }
         while  ( NoSuchFile );
         printf( "crap5");
           
         return( pInFile );

    } /* end fReadOpen */
    And this is what it displayed:

    Please enter int he file for reading
    ===> data.txt
    crap2crap3crap5


    Sooo... i guess ... well I don't know what this means. Out side of crap4 is nothign majro cause the file was indeed valid... Sooo again i'm back to square one.
     
    Last edited: Dec 6, 2004
  14. Dec 6, 2004 #13
    after the return ( pInFile) i had a printf("whatever"); and it didn't get displayed.
     
  15. Dec 6, 2004 #14

    dduardo

    User Avatar
    Staff Emeritus

    After you return a value the function exits.

    Is the pointer being returned correctly?
     
  16. Dec 6, 2004 #15
    Well i assume not, because I had a print statement after the return and nothing happend. the pointer is used in the next function that I had posted up top. I'm pretty sure it's pasted correctly.
     
    Last edited: Dec 6, 2004
  17. Dec 6, 2004 #16
    Hmmmm I just put a prinf statement in the next function below the whole "file getting one" and when i ran it it displayed the print F on the same line as the printf for the entering in the file. Now i'm slightly confused.

    EDIT It just started working soo i gotta debug some more, thanks for the help :)
     
    Last edited: Dec 6, 2004
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?



Similar Discussions: Loading a File in C++
  1. Deleting these files? (Replies: 1)

Loading...