首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个关于c语言函数 fread读取有关问题

2012-05-16 
一个关于c语言函数 fread读取问题用fread读取如图示所示文本,我是这样写的,下面是全部代码:#includeiostr

一个关于c语言函数 fread读取问题
用fread读取如图示所示文本,我是这样写的,下面是全部代码:

#include<iostream>
using namespace std;

typedef struct STUDENT
{
char id[10];
char name[20];
char score[4];
}Stu;

typedef struct college
{
char id[10];
char name[20];
char score[4];
}Col;


int main()
{
Stu stu[6];
Col col[6]; 
FILE *fp;
//char strscore[4];
char ch[500]={0};

for(int i=0;i<6;i++)
{
memset(&stu,0,sizeof(stu[0]));
memset(&col[i],0,sizeof(col[0]));
}

if(!(fp=fopen("tt.txt","at+")))
{
cout<<"文件无法打开!"<<endl;
system("pause");
exit(0);
}

rewind(fp);
fgets(ch,500,fp);

for(i=0;i<6;i++)
{

fread(&col[i],sizeof(col[i]),1,fp);
fputc('\n',fp);
}

rewind(fp);
fgets(ch,500,fp);[img=][/img]

for(i=0;i<6;i++)
{

fread(&stu[i],sizeof(stu[i]),1,fp);
printf("%s %s %s\n",stu[i].id,stu[i].name,stu[i].score);
fgetc(fp);
}

return 0;

}


唉,插不了图;我画一个,框框是记事本

---------------------------------------------------------------
| 学号 姓名 计算机 |  
| 1001 曹操 59.00 |
| 1002 貂蝉 85.00 |
| 1003 西施 56.00 |
| 1004 小乔 98.00 |
| 1005 大乔 89.00 |
| 1006 我是警察 100.00


|
|
|
|
|
|
|
|..................................................................................................

VC6.0运行结果如下图:框框是黑框

|----------------------------------------------------------------
|1001 曹操 59.00 曹操 59.00 9.0
|1002 貂蝉 85.00 貂蝉 85.00 5.0
|1003 西施 56.00 西施 56.00 6.0
|1004 小乔 98.00 小乔 98.00 8.0
|1005 大乔 89.00 大乔 89.00 9.0
|1006 我是警察 100.00?? 我是警察 100.00?? 0.00


|
|——————————————————————————————————-——————————————
  在"我是警察" 100.00?? 这个箭头是垂直的

|
[i]|问题
[color=#808000][/color]
我想知道用fread函数如何才能正确的出来。
|
|
|
|
|
|
|
|
|





[解决办法]
c标准流的文本模式存在严重设计问题,不可能提供完美的功能。
[解决办法]

探讨

c标准流的文本模式存在严重设计问题,不可能提供完美的功能。

[解决办法]
C/C++ code
#include<stdio.h>typedef struct STUDENT{    char id[10];    char name[20];    char score[8];}Stu;int main(){    Stu stu[6];    FILE *fp;    int i;    char ch[500]={0};    if(!(fp=fopen("d:\\1.txt","r")))    {        printf("文件无法打开!\n");        system("pause");        exit(0);    }    for(i=0;i<6;i++)    {        fscanf(fp," %s",stu[i].id);        fscanf(fp," %s",stu[i].name);        fscanf(fp," %s",stu[i].score);    }    fclose(fp);    for(i=0;i<6;i++)    {        printf("%s %s %s\n",stu[i].id,stu[i].name,stu[i].score);    }    return 0;} 


[解决办法]
不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了

[解决办法]

探讨

引用:

c标准流的文本模式存在严重设计问题,不可能提供完美的功能。


求解什么严重设计问题?

热点排行