c语言的流
㈠ c语言中的流
流么就是流派的意思,就像你打游戏(比如魔兽争霸),就有鼠标流,键盘流。鼠标流:擅长用鼠标操作的;键盘流:擅长用键盘操作的;
流最明显的就是输入流和输出流,输入流(如scanf,getchar等):用于输入的;输出流(printf,putchar等):用于输出的。
㈡ C语言中stdin流的用法是什么
C语言中stdin流的用法:
stdin是C语言中标准输入流,一般用于获取键盘输入到缓冲区里的东西。
访问stdin,可用stdio.h中提供的以下几个函数:
(1)scanf、getchar来从stdin流中获取指定的数据。scanf根据第一个参数指定的格式符将数据读入后续参数指定的内存位置中;getchar从stdin流中读取一个字符并返回。
(2)可以使用一般的访问输入流的函数来访问stdin,比如:fscanf、fgetc,使用方法和scanf、getchar类似,只是多了一个参数指定文件流。当然,scanf和getchar的具体实现就是通过调用fscanf和fgetc,这样可以提高代码利用率。
(3)可以用fflush和rewind这两个函数来刷新stdin,来清空缓冲区中已有的内容,不过这种方法不是标准方法,当stdin被重定向到文件时,这会导致指针重新指向文件开头。
㈢ C语言文本流和二进制流
一、文本流和二进制流
在C中引入了流(stream)的概念。它将数据的输入输出看作是数据的流入和流出,这样不管是磁盘文件或者是物理设备(打印机、显示器、键盘等),都可看作一种流的源和目的,视他们为同一种东西,而不管其具体的物理结构,即对他们的操作,就是数据的流入和流出。这种把数据的输入输出操作对象,抽象化为一种流,而不管它的具体结构的方法很有利于编程,而涉及流的输出操作函数可用于各种对象,与其具体的实体无关,即具有通用性。
在C中流可分为两大类,即文本流(text stream)和二进制流(binary stream)。所谓文本流是指在流中流动的数据是以字符形式出现。在文本流中,'\n'被换成回车CR和换行LF的代码0DH和0AH。而当输出时,则0DH和0AH本换成'\n'。
二进制流是指流动的是二进制数字序列,若流中有字符,则用一个字节的二进制ASCII码表示,若是数字,则用一个字节的二进制数表示。在流入流出时,对\n符号不进行变换。例如2001这个数,在文本流中用其ASCII码表示为:
'2' '0' '0' '1'
| | | |
50 48 48 49
共占4字节。而在二进制流中则表示为:00000111 11010001 用十六进制就是07D1。只占两字节。
由此看出,二进制流比文本流节省空间,且不用进行对\n的转换,这样可以大大加快流的速度,提高效率。因而,对于含有大量数字信息的数字流,可以采用二进制流的方式;对于含有大量字符信息的流,则采用文本流的方式。
二、流和文件
在C语言中流就是一种文件形式,它实际上就表示一个文件或设备(从广义上讲,设备也是一种文件)。把流当作文件总觉得不习惯,因而有人称这种和流等同的文件为流式文件,流的输入输出也称为文件的输入输出操作。当流到磁盘而成为文件时,意味着要启动磁盘写入操作,这样流入一个字符(文本流)或流入一个字节(二进制流)均要启动磁盘操作,将大大降低传输效率(磁盘是慢速设备),且降低磁盘的使用寿命。为此,C语言在输入输出的使用使用了缓冲技术,即在内存为输入的磁盘文件开辟了一个缓冲区(缺省为512字节),当流到该缓冲区装满后,再启动磁盘一次,将缓冲区内容装到磁盘文件中去。读取文件也是类似。
在C语言中将此种文件输入输出操作称为标准输入输出,或称流式输入输出(因这种输入输出操作是ANSI C推荐的标准)。还有一种是不带缓冲文件输入输出,称为非标准文件输入输出或低级输入输出,它将由DOS直接管理。关于这两种输入输出文件系统下节将会介绍。
三、文件FILE的数据结构
typedef struct
{
short level;
unsigned flags;
char fd;
unsigned char hold;
short bsize;
unsigned char *buffer;
unsigned char *curp;
unsigned istemp;
short token;
}FILE;
这是Turbo C中使用的定义(在stdio.h文件中),不同的C编译器,可能使用不同的定义,但基本含义变化不会太大。
flags: 是一个10位的标志字,其具体含义如下:
位 代表符号 含义
0 _F_READ 读
1 _F_WRIT 写
2 _F_BUF 由fclose释放缓冲区
3 _F_LBUF 行缓冲
4 _F_ERR 出错标志
5 _F_EOF EOF文件尾标志
6 _F_BIN 二进制方式
7 _F_IN 在进行输入
8 _F_OUT 在进行输出
9 _F_TERM 文件是一个终端
其他各字段内容以及flags字段内各位所的功能,请参照其他一些资料。这里不多说了,它目前并不是我们要求的内容。
应该注意,不要把文件指针和FILE结构指针混为一谈,它们代表两个不同的地址。文件指针指出了对文件当前读写的数据位置,而FILE结构指针是指出了打开文件所对应的FILE结构在内存中的地址,这个指针它实际本身也包含了文件指针的信息。流指针中的各字段是供C语言内部使用的,用户不应该存取它的任何字段。用fwrite写的文件为二进制流,所以当用文本打开文件时数字变成了乱码.解决办法是:1.改用fprintf 或者用itoa等格式化数字为字符串,然后用fwrite#include "stdio.h"
#include "iostream.h"
struct student
{
int no;
char name[10];
}a[4];
void save()
{ int i;
FILE *p;
if ((p=fopen("1.txt","w"))==NULL)
{cout<<"\n"<<"can not open file"; <br>}
for(i=1;i<4;i++)
{
fprintf(p, "%d%10s\t", a[i].no, a[i].name);
}
fclose(p);
}
void main()
{
printf("please input no name");
int i;
for (i=1;i<4;i++)
{scanf("%d%s",&a[i].no,a[i].name); <br>}
for (i=1;i<4;i++)
{cout<<a[i].no<<a[i].name; <br>}
save();
}函数说明:fprintf int fprintf(FILE *fp, char *format,…)
stdio.h
将格式化数据写入流式文件中
fp 文件指针
format 格式化字符,同函数printf()中的格式控制字符 … 要显示的数据项列表2.用另一种方法进行文件输入编码可消除这些问题。
主要是用C++,添加头文件# include "fstream.h"。参考代码如下:
#include "stdio.h"
#include "iostream.h"
# include "fstream.h"
struct student
{int no; <br>char name[10]; <br>}a[4];
void main()
{
ofstream ofile ( "file.txt", ios::out ) ;
printf("please input 4 students' names\n");
int i;
for (i=0;i<4;i++)
{scanf("%s",a[i].name); <br>a[i].no=i+1; <br>ofile <<a[i].no<<" "<<a[i].name<<endl; <br>}
}
㈣ C语言中流指什么,不要复制,用自己的理解解释一下,感谢了
版本四
流 原从stream翻译来。
什么电脑外设控制,磁盘文件输入输出,只要是输入或者输出所产生的数据都是流。
从linux对于硬件设备的控制很容易看出,对于硬件和磁盘上的文件,C语言的操作方法基本上一样。linux中C语言也是把硬件当做文件进行操作。(本质上,它把外设与txt文本文件看成一类东西。)流的概念的提出,我认为是为了程序对于文本和硬件的一系列操作而设定的统一标准。从程序员角度来看,就不需要知道各个操作的细节,编程的时候,统一把外设都当成文件进行操作就OK了。比如对于声卡,先OPEN打开,然后write写入,就完成喇叭发声,然后close关闭。和对于文本操作基本一样。
不管对设备或是文件(广义上都是文件)的输入输出操作,而产生的数据,都是I/O流。而C语言中的I/O流能分为两种:文本流,二进制流。很容易看出文本流控制很二进制流控制的区别。你用TC,fopen打开一个MP3或者别的32位文件,然后读取,会发现用文本流打开后,文件只能读到开头一点点。因为32位音乐文件有很多的'00'数据,文本流会把它当做文件结束符而结束读取。而二进制流打开方式则可以从头读到尾。(这时候输出的时候可能存在点问题,实验的时候可以用二进制 流方式再写入到另外一个文件来观察。)
流是由输入输出产生的,是用于数据交换或转换的统一的标准(特指这一类的数据)。C++和一些编程语言中定义的流(stream)类,就是对这类数据的定义。并通过成员函数对“流”进行操作。这样,用户和程序,程序和外设之间都是通过“流”进行交互。而程序员不需要知道“流”的底层到底是怎么实现的。 就好像吃饭和排泄。数据流中定义了,先牙齿咀嚼,然后胃部消化,然后小肠吸收,然后大肠发酵,然后你懂的。你只需要CIN,还有COUT,就能控制吃喝拉撒。你管它是细嚼还是狼吞?你管它便秘还是拉肚子?吞吐量是电脑性能的事。你管它是先进小肠还是先进胃?底层是内核的事。你只需要拥有了CIN和COUT,你就拥有了一切。
从广义上来说,流也是文件,不同于txt文本类的文件(流属于数据,数据等同于文件)。你可以对流进行各种操作。缓冲区的定义,也是为了对流的操作。
综上,我们知道了,流是数据,流是标准,流是文件。流的作用我们知道了,那么“流”到底是个什么玩意呢?非常同意 448634095 所说的。用着用着自己就知道是什么玩意了。就好像刚开始学编程 闹不明白函数 是个啥意思,和数学上的函数一点也不一样。你现在知道整形是什么了吧?你能不能给我举个简单的列子给我解释下整形是什么?
注意:流和 输入输出的缓冲区是两个概念。
㈤ C语言“流”是什么概念
首先理解流的意思,可以想象水从水管里出来,这就是一股水流。
然后,c语言中流动的不再是水,而是有顺序的,有排列结构的数据。比如100001111100001(二进制)
C里的文件流,C里标准文件方式把文件当作流来看,也就是有一个内部缓冲buffer(在C库内部建立,一般为512B),每次以标准方式打开文件时,读入时先将数据读到这个缓冲区里,写的时候也是先写入缓冲区里。
C里标准输入就是stdin,标准输出就是stdout,C对键盘输入(比如scanf)和屏幕输出(比如printf)的行缓冲机制就是建立在这些文件的流机制上的。
有时候比如scanf输入整数时,最后一个回车就会留在流的buffer里。如果下次时你读字符的话就会把它读入。这就是为什么有些C实现允许你用fflush(stdin)来清除输入缓冲,不过C标准只定义了对普通文件和stdout等输出流的fflush行为。因为按理说fflush刷新缓冲不应该丢弃输入的。
㈥ c语言中什么是流
流是程序输入或输出的一个连续的字节序列,设备(例如鼠标、键盘、磁盘、屏幕、调制解调器和打印机)的输入和输出都是用流来处理的。在C语言中,所有的流均以文件的形式出现----不一定是物理磁盘文件,还可以是对应于某个输入/输出源的逻辑文件。
㈦ C语言中流是什么意思
C语言的I/O系统为用户提供了一个接口,该接口与实际的存取设备无关。只是设备的一个抽象表示形式。这个抽象的接口称为流,实际的设备称为文件。
C文件系统可以与各种设备一起使用,如打印机、硬盘、终端等,缓冲文件系统可以将每个设备转换成逻辑设备,即所谓的流。所有的流工作方式类似,所以很容易操作不同的设备。流有2种类型:文本流和二进制流。
文本流是一系列字符,可以由多行构成,每行由一个换行符终止。
二进制流是一系列字节,并与外部设备上的字节一一对应。