关于#c++#的问题:为什么第一个程序读文件的结果是错误的,但是第二个程序读出来却是正确的这个是文件file1#include <stdio.h>

为什么第一个程序读文件的结果是错误的,但是第二个程序读出来却是正确的
这个是文件file1

img


#include<stdio.h>
#include <string.h>
struct SZ{
    int N;
    int f;
    float k;
    float b;
    float c;
    float d;
    float e;
}sz[5];
    int main(){

    FILE *fp=fopen("file1.txt","r+");
    
    if(fp!=NULL){
        printf("文件打开成功\n");
    }
    for(int i=1;i<=5;i++){
 fscanf(fp,"%d",&sz[i-1].N);
 printf("%d",sz[i-1].N);
 fscanf(fp,"%f",&sz[i-1].k);
 printf("%d",sz[i-1].k);
 fscanf(fp,"%f",&sz[i-1].b);
 fscanf(fp,"%f",&sz[i-1].c);
 fscanf(fp,"%f",&sz[i-1].d);
 fscanf(fp,"%f",&sz[i-1].e);
 }
    fclose(fp);
    return 0;
    }

运行结果

img

#include<stdio.h>
#include <string.h>
struct a{
        float e;
        int b;
        int c;
    }s[3];
    int main(){

    FILE *fp=fopen("file1.txt","r+");
    
    if(fp!=NULL){
        printf("文件打开成功\n");
    }
    for(int i=1;i<4;i++){
 fscanf(fp,"%f",&s[i-1].e);
 fscanf(fp,"%d",&s[i-1].b);
printf("%f\n",s[i-1].e);
    printf("%d\n",s[i-1].b);               
    }
    fclose(fp);
    return 0;
    }

运行结果

img

修改如下,供参考:

#include<stdio.h>
#include <string.h>
struct SZ {
    int N;
    int f;
    float k;
    float b;
    float c;
    float d;
    float e;
}sz[5];
int main() {

    FILE* fp = fopen("file1.txt", "r+");

    if (fp != NULL) {      
        printf("文件打开成功\n");
        for (int i = 1; i <= 5; i++) {
            fscanf(fp, "%d", &sz[i - 1].N);
            printf("%d\n", sz[i - 1].N);
            fscanf(fp, "%f", &sz[i - 1].k);
            printf("%f\n", sz[i - 1].k);    //printf("%d", sz[i - 1].k); 修改
            fscanf(fp, "%f", &sz[i - 1].b);
            printf("%f\n", sz[i - 1].b);    // 修改
             fscanf(fp, "%f", &sz[i - 1].c);
            printf("%f\n", sz[i - 1].c);    // 修改
            fscanf(fp, "%f", &sz[i - 1].d);
            printf("%f\n", sz[i - 1].d);    // 修改
            fscanf(fp, "%f", &sz[i - 1].e);
            printf("%f\n", sz[i - 1].e);    // 修改
        }
        fclose(fp);
    } // 修改
    return 0;
}