请高手指点一下,文件问题

时间:2021-02-04 10:51:25
这两天在学文件,然后做了个小程序读取一个txt文件,编译倒是能编译过去,就是打印出来的数据不对,看情况像是指针乱指了,打印出来很多其它内存的数据,看网上看了半天也不知道怎么解决,请高手指点一下,谢谢了
#include <stdio.h>
#include <stdlib.h>

struct yuan
{
char name[20];
int age;
int pay;
struct yuan *next;
}Y[2];

void read()
{
int i;
FILE *fp;
fp=fopen("test.txt","rt");
for(i=0;i<5;i++)
{
fread(&Y[i],sizeof(struct yuan),1,fp);
printf("%s %d %d \n",Y[i].name,&Y[i].age,&Y[i].pay);
}
fclose(fp);
}

void main(int argc,char **argn)
{
int n;
read();
}


编译时打印结果如下图
请高手指点一下,文件问题


txt文件如下
sucre  26 1000
philps 28 1800
lindey 32 1500
mike   22 1800
john   45 5000

12 个解决方案

#1



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

struct yuan
{
    char name[20];
    int age;
    int pay;
    struct yuan *next;
}Y[5];  // 用到了5个你只定义了 2个

void read()
{
    int i;
    FILE *fp;
    fp=fopen("test.txt","rt");
    for(i=0;i<5;i++)
    {
        fread(&Y[i],sizeof(struct yuan),1,fp);
        printf("%s %d %d \n",Y[i].name,&Y[i].age,&Y[i].pay);
    }
    fclose(fp);
}

void main(int argc,char **argn)
{
    int n;
    read();
}

#2


Y[i],你这个i取值为 0~4,而你的Y[2]只有两个

#3


那是那阵调试没改过来,5个也还是打印结果不对
引用 1 楼 liu111qiang88 的回复:
C/C++ code

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

struct yuan
{
    char name[20];
    int age;
    int pay;
    struct yuan *next;
}Y[5];  // 用到了5个你只定义了 2个

void read()
{
    int i;
……

#4


这个不是主要原因,还是打印出来别的内存中的数据
引用 2 楼 bdmh 的回复:
Y[i],你这个i取值为 0~4,而你的Y[2]只有两个

#5


这是我调试的时候看只有前两组能正确打印,就改成Y[2]只打印前两个,但是后面还是那些别的数据,就是不打印文件中后三组了
引用 2 楼 bdmh 的回复:
Y[i],你这个i取值为 0~4,而你的Y[2]只有两个

#6


坑爹啊,结构体定义自己看有木有。。。。
struct yuan
{
    char name[20];
    int age;
    int pay;
    struct yuan *next;
}
fread(&Y[i],sizeof(struct yuan),1,fp);
sizeof(struct yuan)
不出错才怪啊有木有。。。。

#7


唉。。。。。。。

#8


meiyou sisi

#9



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

struct yuan
{
char name[20];
int age;
int pay;
struct yuan *next;
}Y[5];

void read()
{
int i = 0;
FILE *fp;
fp=fopen("d:\\test.txt","rt");
while (!feof(fp))
{
fscanf(fp, "%s%d%d", Y[i].name,&Y[i].age,&Y[i].pay);
printf("%s %d %d \n",Y[i].name,Y[i].age,Y[i].pay);
i++;
}

fclose(fp);
}

void main(int argc,char **argn)
{
int n;
read();
}

#10


自己改下路径就ok了

#11


引用 9 楼 c_losed 的回复:
C/C++ code

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

struct yuan
{
    char name[20];
    int age;
    int pay;
    struct yuan *next;
}Y[5];

void read()
{
    int i = 0;
    FILE *fp;……


正解,++
同时struct yuan *next;这个属于多余的,可以去掉的

#12


你读的时候fread把‘\n’也读了呢
而且你读的单元是sizeof(struct)到了next指针都位置,就错了呀

#1



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

struct yuan
{
    char name[20];
    int age;
    int pay;
    struct yuan *next;
}Y[5];  // 用到了5个你只定义了 2个

void read()
{
    int i;
    FILE *fp;
    fp=fopen("test.txt","rt");
    for(i=0;i<5;i++)
    {
        fread(&Y[i],sizeof(struct yuan),1,fp);
        printf("%s %d %d \n",Y[i].name,&Y[i].age,&Y[i].pay);
    }
    fclose(fp);
}

void main(int argc,char **argn)
{
    int n;
    read();
}

#2


Y[i],你这个i取值为 0~4,而你的Y[2]只有两个

#3


那是那阵调试没改过来,5个也还是打印结果不对
引用 1 楼 liu111qiang88 的回复:
C/C++ code

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

struct yuan
{
    char name[20];
    int age;
    int pay;
    struct yuan *next;
}Y[5];  // 用到了5个你只定义了 2个

void read()
{
    int i;
……

#4


这个不是主要原因,还是打印出来别的内存中的数据
引用 2 楼 bdmh 的回复:
Y[i],你这个i取值为 0~4,而你的Y[2]只有两个

#5


这是我调试的时候看只有前两组能正确打印,就改成Y[2]只打印前两个,但是后面还是那些别的数据,就是不打印文件中后三组了
引用 2 楼 bdmh 的回复:
Y[i],你这个i取值为 0~4,而你的Y[2]只有两个

#6


坑爹啊,结构体定义自己看有木有。。。。
struct yuan
{
    char name[20];
    int age;
    int pay;
    struct yuan *next;
}
fread(&Y[i],sizeof(struct yuan),1,fp);
sizeof(struct yuan)
不出错才怪啊有木有。。。。

#7


唉。。。。。。。

#8


meiyou sisi

#9



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

struct yuan
{
char name[20];
int age;
int pay;
struct yuan *next;
}Y[5];

void read()
{
int i = 0;
FILE *fp;
fp=fopen("d:\\test.txt","rt");
while (!feof(fp))
{
fscanf(fp, "%s%d%d", Y[i].name,&Y[i].age,&Y[i].pay);
printf("%s %d %d \n",Y[i].name,Y[i].age,Y[i].pay);
i++;
}

fclose(fp);
}

void main(int argc,char **argn)
{
int n;
read();
}

#10


自己改下路径就ok了

#11


引用 9 楼 c_losed 的回复:
C/C++ code

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

struct yuan
{
    char name[20];
    int age;
    int pay;
    struct yuan *next;
}Y[5];

void read()
{
    int i = 0;
    FILE *fp;……


正解,++
同时struct yuan *next;这个属于多余的,可以去掉的

#12


你读的时候fread把‘\n’也读了呢
而且你读的单元是sizeof(struct)到了next指针都位置,就错了呀