文件输出数据问题fprintf fscanf

#include
#define N 5
struct StuInfo
{
char name[10];
int num;
int age;
}stua[N],stub[N];
int main()
{
FILE*fp;
int i;
if((fp=fopen("d:\student.txt","w+b"))==NULL)
{
printf("打开错误");
exit(0);
}
printf("\ninput\n");
for(i=0;iscanf("%s%d%d", stua[i].name, &stua[i].num, &stua[i].age);
for(i=0;ifprintf(fp,"%s%d%d", stua[i].name, stua[i].num, stua[i].age);
rewind(fp);
for(i=0;ifscanf(fp,"%s%d%d\n", stub[i].name, &stub[i].num, &stub[i].age);
printf("\n\nname number age\n");
for(i=0;iprintf("%s %5d %d\n", stub[i].name, stub[i].num, stub[i].age);
fclose(fp);
return 0;
}

img

img


感觉程序也没有啥问题呀,为什么运行出来老是只把值赋值到第一个里边呢?能指教一下吗?

img


要了解scanf系列函数的特性。

#include <stdio.h>
#define N 5
struct StuInfo
{
    char name[10];
    int num;
    int age;
} stua[N], stub[N];
int main()
{
    FILE *fp;
    int i;
    if ((fp = fopen("student.txt", "w+b")) == NULL)
    {
        printf("打开错误");
        exit(0);
    }
    printf("\ninput\n");
    for (i = 0; i < N; i = i + 1)
        scanf("%s%d%d", stua[i].name, &stua[i].num, &stua[i].age);

    for (i = 0; i < N; i = i + 1)
    {
        fprintf(fp, "%s %d %d", stua[i].name, stua[i].num, stua[i].age);
        fputc('\n',fp);
    }
    rewind(fp);
    for (i = 0; i < N; i = i + 1)
        fscanf(fp, "%s%d%d\n", stub[i].name, &stub[i].num, &stub[i].age);
    printf("\n\nname number age\n");
    for (i = 0; i < N; i = i + 1)
        printf("%s %5d %4d\n", stub[i].name, stub[i].num, stub[i].age);
    fclose(fp);
    return 0;
}



fprintf中的%s%d%d之间加空格,不然3个值连在一起啦。fscanf的时候没办法正确拆分的

供参考:

#include <stdio.h>
#include <stdlib.h>
#define N 5
struct StuInfo
{
    char name[10];
    int  num;
    int  age;
}stua[N], stub[N];
int main()
{
    FILE* fp;
    int i;
    if ((fp = fopen("d:\\student.txt", "w+b")) == NULL) //fopen("d:\student.txt", "w+b"))
    {
        printf("打开错误");
        exit(0);
    }
    printf("input\n");
    for (i = 0; i < N; i = i + 1)
        scanf("%s%d%d", stua[i].name, &stua[i].num, &stua[i].age);
    for (i = 0; i < N; i = i + 1)
        fprintf(fp, "%s %d %d\n", stua[i].name, stua[i].num, stua[i].age);//写入文件的格式:"%s %d %d\n"
    rewind(fp);
    for (i = 0; i < N; i = i + 1)
        fscanf(fp, "%s %d %d\n", stub[i].name, &stub[i].num, &stub[i].age);//从文件读出的格式与写入格式对应
    printf("\n\nname number age\n");
    for (i = 0; i < N; i = i + 1)
        printf("%s  %5d   %d\n", stub[i].name, stub[i].num, stub[i].age);
    fclose(fp);
    return 0;
}