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;
}