2 qq 33447655 qq_33447655 于 2016.01.23 06:44 提问

C语言,不行啊,不能读取完整啊?这是怎么回事啊

#include
#include
#include
struct st
{
char name[50];
int age;
}s[3];
void main(void)
{
int i;
FILE*fpo;
fpo=fopen("e:\students.txt","r");
if(fpo==NULL)
{
printf("失败");
exit(0);
}
for(i=0;i<3;i++)
{
fread(&s[i],sizeof(struct st),1,fpo);
}
for(i=0;i<3;i++)
{
printf("%s%d",s[i].name,s[i].age);
}
fclose(fpo);

getch();

}

图片说明

9个回答

caozhy
caozhy   Ds   Rxr 2016.01.23 08:00

把文件的内容贴出来啊。不然怎么知道

YXTS122
YXTS122 回复caozhy:我帮他截图了,看到没?
接近 2 年之前 回复
YXTS122
YXTS122 回复caozhy:他这题,我刚上机试了一下,确实输出有问题,后面不知道怎么了多了3个0?
接近 2 年之前 回复
qq_33447655
qq_33447655 大哥,你是说那个students文件里的内容? 那时一堆乱码
接近 2 年之前 回复
qq_27183003
qq_27183003   Ds   Rxr 2016.01.23 14:36
//这个默认是以文本格式打开的
 fread();//用于二进制文件读取,与打开方式不匹配,容易出问题。
从你的文件名看应该是文本文件,但从内容来分析应该是二进制文件。
所以改为二进制打开:
 fopen( "student.txt","rb");

YXTS122
YXTS122   2016.01.23 17:30
 #include<stdio.h>
#include<stdlib.h> 
struct st
{
    char name[4];
    char age[4];
}s[3];
void main(void)
{
int i,j;
FILE*fpo;
fpo=fopen("e:\\students.txt","r");
if(fpo==NULL)
{
    printf("失败");
    exit(0);
}
for(i=0;i<3;i++)
{
    fread(&s[i],sizeof(struct st),1,fpo);
    for(j=0;j<4;j++)
        printf("%c",s[i].name[j]);
    for(j=0;j<4;j++)
        printf("%c",s[i].age[j]);
}
fclose(fpo);
system("pause");
}

图片说明
可以的话,记得采纳

qq_33827709
qq_33827709   2016.01.23 09:39

你可以检测C盘有没有病毒,这也是一个办法

YXTS122
YXTS122   2016.01.23 12:02

图片说明

qq_33447655
qq_33447655   2016.01.23 12:32

图片说明
读取失败

YXTS122
YXTS122   2016.01.23 12:36

图片说明

John_ToStr
John_ToStr   Rxr 2016.01.23 16:11

看看你的文件指针向后移动了没有

91program
91program   Ds   Rxr 2016.01.23 08:40

请在代码中检测一下 fread 的返回值,以判断读是否成功吧。

91program
91program 回复qq_33447655: 读失败时,也要先关闭 文件、才能退出。
接近 2 年之前 回复
qq_33447655
qq_33447655 我加了个if 防错处理.结果是 读取失败了
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!