简体   繁体   中英

reading using fscanf() for multiple values (as in the text file below)

new to fscanf()...plz help

program

#include<stdio.h>
typedef struct
{
int rollnum;
char name[30];
int mark1;
int mark2;
int mark3;
}data;

int main(int argc,char* argv[])
{
int total,c1,c2,i;
char str[30];
FILE *original,*pass,*fail;
data *student;

original=fopen("C:\\Users\\user\\Desktop\\struct.txt","r");
pass=fopen("C:\\Users\\user\\Desktop\\pass.txt","w");
fail=fopen("C:\\Users\\user\\Desktop\\fail.txt","w");

for(i=0;i<5;i++)
{
fscanf(original,"%d %s %d %d %d",
&(student+i)->rollnum,
(student+i)->name,
&(student+i)->mark1,
&(student+i)->mark2,
&(student+i)->mark3);
total=student[i].mark1+student[i].mark2+student[i].mark3;
if(total>50)
fprintf(pass,"%d. %s %d\n",c1,student[i].name,total);
else
fprintf(fail,"%d. %s %d\n",c2,student[i].name,total);
c1++,c2++;
}
printf("Successful\n");
fclose(original);
fclose(pass);
fclose(fail);
return 0;
}

**struct.txt**
1 blesswin 20 40 50
2 sam 40 10 20
3 john 50 20 60
4 james 50 40 70
5 peter 10 40 80

the program is to group the students based on their total into two files...i seem to have some problem though with the fscanf function...ur help with be appreciated...thanks in advance

Without any errors it is more difficult to pinpoint where you are having problems, but probably it has to do with the fact that you are not allocating memory for you students:

data *students;

students = malloc(number_of_students * sizeof(*students));
if (students==NULL)
    printf("Error: failed to allocate memory\n");

Loading data from file into the allocated memory would look something like

for(i=0;i<number_of_students ;i++) {
    fscanf(original,"%d", &(students[i].rollnum));
}

Don't forget to free up the allocate memory after you no longer need it

free(students);

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