文本流和二进制流

1、C中引入流的概念,将数据的数据的输入输出看作是数据的流入和流出,这样不管是磁盘文件或者是物理设备(打印机、显示器、键盘等),都可看作是数据流的源和目的。抽象为一种流,更有利于编程,具体涉及数据流的输入输出可用作各种对象。

2、在C中流可分为两类,文本流和二进制流。计算机的存储在物理上是二进制的,文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码)。

2、1文本流指的是在流动中的数据是以字符形式出现的。在文本流中,'\n'被换成回车和换行的0DH和0AH。当输出时,则0DH和0AH本换成'\n'。

2、2二进制流的流动的是二进制序列,若流中有字符,则由一个字节的二进制ASCII码表示,若是数字则用一个字节的二进制数字表示。在流入流出时,对\n符号不进行转换。

2、3例如2001这个数,在文本流中用其ASCII码表示为:

'2' '0' '0' '1'
| | | |
50 48 48 49
共占4字节。而在二进制流中则表示为:00000111 11010001 用十六进制就是07D1。只占两字节。由此看出,二进制流比文本流节省空间,且不用进行对\n的转换,这样可以大大加快流的速度,提高效率。因而,对于含有大量数字信息的数字流,可以采用二进制流的方式;对于含有大量字符信息的流,则采用文本流的方式。

3、读文本内容然后打印出来

FILE *openfile(char *p,char *m)

{
    char buf[256];
FILE *f;
/*printf("%s 文件",p);
if(gets(buf)==NULL)
{
   fprintf(stderr,"丢失了%s文件名。\n",p);
exit(EXIT_FAILURE);
}*/
if(strcmp(p,"输入")==0)
{
    strcpy(buf,"C:\\Users\\acer\\Desktop\\test1.txt");
}
else if(strcmp(p,"输出")==0)
{
    strcpy(buf,"C:\\Users\\acer\\Desktop\\test2.txt");
}
else
{
    fprintf(stderr,"丢失了%s文件名。\n",p);
exit(EXIT_FAILURE);
}
if((f=fopen(buf,m))==NULL)
{
   perror(buf);
exit(EXIT_FAILURE);
}
return f;
}


int fun(int value);


int main(int argc,char **argv)
{
    char buffer[512];
FILE *input;
input=openfile("输入","r");
while(fgets(buffer,512,input)!=NULL)
{
   int age[10];
int members;
int sum;
int i;
members=sscanf(buffer,"%d %d %d %d %d %d %d %d %d %d",
age,age+1,age+2,age+3,age+4,age+5,age+6,age+7,age+8,age+9);
if(members==0)
continue;
sum=0;
for(i=0;i<members;i+=1)
sum+=age[i];
printf("%5.2f :%s",(double)sum/members,buffer);
}
fclose(input);
return EXIT_SUCCESS;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值