简体   繁体   中英

Why my code doesn't write anything in file (txt)

Everything seems okay and program is running but my report.txt file is empty. There is one warning - "passing argument 2 of 'fwrite' makes integer from pointer without a cast". What might be a problem? (Here is a bit of the code)

int main(int argc, char *argv[]) {
    FILE *fr = fopen("report.txt", "wb");
    FILE *db = NULL;
    
    if (argc > 1)  // open database file for reading, provide a parameter or use default "db.bin"
        db = fopen(argv[1], "rb");
    else
        db = fopen("db.bin", "rb");
        
    if (db) {                            
        Student students[1000];           // all the data goes here
        int size = 20;                    // how many students in database
        
        fread(&size, sizeof(int), 1, db); // reading data from file
        
        for (int i = 0; i < size; i++)        
            fread(&students[i], sizeof(Student), 1, db);            

        printf("%d records loaded succesfully\n", size);
        
        
        // MODIFY CODE BELOW
        
        int counterDemo = 0;             // for counting students
        for (int i = 0; i < size; ++i) { // process all the student records in database
            Student s = students[i];     // store data for each student in s
            
            if(s.load == 0) {            // *** first filter, conditions on the student
               printf("Name - %s, surname -  %s, course -  %d, average grade -  %f, number of courses %d\n ", 
                       s.name, s.surname, s.course, s.average, s.load);
                int anotherDemo = 0;               // for counting courses/grades
                for (int i = 0; i < s.load; ++i) { // process each course taken by the student
                     if(1) {                       // *** second filter, conditions on the course/grade
                        ++anotherDemo;             // counting courses
                        printf("Course name - %s, course grades -  %d\n ", 
                               s.courses[i], s.grades[i]);
                    }
                }
                printf("Languages - %s\n", s.languages);
                printf("\n");
                        
                if (anotherDemo == s.load)        // *** third filter, various other conditions            
                    ++counterDemo;                // counting studfents
                fwrite("%s %s", 
                       &s.name, &s.surname, fr);
            }
        }
        printf("Filter applied, %d students found\n", 
               counterDemo);                     // how many passed the filters
        fclose(db); 
    } else 
        printf("File db.bin not found, check current folder\n");
    
    return 0;
}

For your warning look here , fwrite isn't like printf you need to write it as:

fwrite(s.name, strlen(s.name), 1, db);
fwrite(s.surname, strlen(s.surname), 1, db);

your code:

fwrite("%s %s", &s.name, &s.surname, fr);

my fix :

fprintf(fr, "%s %s", s.name, s.surname);

you used fwrite like fprintf

all write function dont get parameters like %s %i %d ..etc http://manpagesfr.free.fr/man/man3/fread.3.html (man are life ♥o♥)

also write didn't "write" the \\0 if you didn't give it a string with a \\0.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM