简述c语言输入输出流中基本的输入,输出函数功能

C标准库源码解剖(13):输入输出函数stdio.h-c/c++-电脑编程网C标准库源码解剖(13):输入输出函数stdio.h作者:JackZhou 和相关&&&&& C标准中的I/O库是一个比较庞大的库,实现也比较复杂。显然I/O库的实现是依赖于操作系统的,不同的系统上I/O库的实现机理是不一样的。glibc中,I/O库的核心实现在libio目录下。有4个头文件libio.h, iolibio.h, libioP.h, strfile.h, stdio.h,其中stdio.h是导出的标准C头文件,其余都是内部实现。这里并不打算解剖整个I/O库的源代码(那样可能一本书也说不完),只是概述性的介绍一下它的轮廓和所有标准接口的功能。我们学习I/O库也是为了能在实践中应用它,因此因此对C标准中所有的I/O接口要有个全面的了解。&&& 输入/输出函数主要在stdio.h中,对应的宽字符版本在wchar.h中,下面列出标准C中定义的所有接口:&&& 1、相关类型和常量:FILE、EOF在stdio.h中;wchar_t、wint_t、WEOF、WCHAR_MAX、WCHAR _MIN等在wchar.h中定义。size_t和NULL在stdio.h, wchar.h和stddef.h均会定义,同时使用其中的多个头文件是无害的。&&& 2、fopen,fclose,fflush,frepoen,fwide,FOPEN_MAX,FILENAME_MAX:打开文件并返回数据流、关闭文件、清空数据流的缓冲区、将文件重新关联到一个数据流、fwide在wchar.h中用于设置与测试流定向、可以同时打开的数据流最大个数、文件名的最大长度。&&& 文件访问方式:&r&、&w&、&a&、&r+&、&w+&、&a+&,所有访问方式后面都可以加上字母b,表示数据流保存二进制数据,而不是字符数据。&&& 3、setuf,setbuf,BUFSIZ,_IOFBF,_IOLBF,_IONBF:设置数据流的缓冲区、BUFSIZ缓冲区的默认长度、后面三个是缓冲模式,为数完全缓冲、行缓冲(写入换行符或缓冲区满时刷新缓冲区)、数据流不缓冲。  
&&& 4、stdin,stdout,stderr:标准输入流、输出流、错误流。除stderr之外,另外两个数据流都缓冲。C语言程序执行时,会预先打开这3种文本流。  
&&& 5、fseek,ftell,rewind,fgetops,fsetpos:设置流的读写位置、返回流的当前读写位置、将流的位置恢复到开头、fgetpos/fsetpos用于获取或设置流的位置,其值放在fpos_t类型的参数中。定位码有SEEK_SET, SEEK_CUR,SEEK_END。&&& 6、fgetc,fgetwc,getc,getwc,getchar,getwchar,ungetc,ungetwc:从流中读取下一个字符并作为int类型的值返回、getchar则从标准输入流中读取、ungetc系列将字符c推回到输入流中。&&& 7、fgets,fgetws,gets:从流中读取一个长为n的字符串到s中,直到遇到换行符、文件末尾或读取了n-1个字符,然后在字符串末尾加上终止符、gets则从标准输入流中读取。&&& 8、fscanf,fwscanf,scanf,wscanf,sscanf,swscanf:格式化输入函数。从流中读取字符并根据控制字符串把字符转换成相应的值。控制字符串后面的每个参数应为指针,从输入流读取的值转换之后存放在指针指向的对象中。&&& 控制字符串:除空白符和%号以外的任何其他字符都要匹配输入流中下一个字符。如果不匹配,则发生冲突,终止转换操作。指针参数要有正确的个数和正确的类型,符合控制字符串中的转换说明。&&& scanf系列的转换说明以%号开始,然后依次出现下列元素:&&& (1)可选的赋值取消标志符:*&&& (2)可选的最大字段宽度:表示为正的十进制整数&&& (3)可选的长度说明符:有hh,h,l,ll,j,z,t或L&&& (4)必要的转换说明符:有a,c,d,e,f,g,i,n,o,p,s,u,x,%或[...]。&&& 常用的转换说明:%d,%i,%u,%o,%x,%c,%s,%f,%e,%%。&&& 9、fputc,fputwc,putc,putwc,putchar,putwchar:向输出流中写入一个字符、putchar则向标准输出流写入。&&& 10、fputs,fputws,puts:向输出流中写入一个字符串,不包括null终止符、puts则向标准输出流写入。&&& 11、fprintf,printf,sprintf,snprintf,fwprintf,wprintf,swprintf:格式化输出函数。根据控制字符串表示的格式,把输出转换成一系列格式发送到输出流中。&&& printf系列的转换说明以%号开始,然后依次出现下列元素:&&& (1)0个或多个标志字符:-,+,0,#或空格,修改转换操作的含义&&& (2)可选的最小字段宽度:表示为十进制整数常量&&& (3)可选的精度说明:表示为小数点加一个十进制整数&&& (4)可选的长度说明符:有ll,l,L,h,hh,j,z或t&&& (5)转换操作:a,A,c,d,e,E,f,g,G,i,n,o,p,s,u,x,X或%。&&& 常用的转换操作:%d,%12d,%u,%o,%c,%s,%p,%f,%e,%%。&&& 12、vfprintf,vprintf,vsprintf,vfscanf,vscanf,vsscanf,vfwprintf,vwprintf,vswprintf,vfwscanf,vwscanf,vswscanf:与上面的printf和scanf系列类似,只不过不是用省略号作为可变参数,而用stdarg.h中的va_list类型作为一个参数,这就允许编程人员定义自己的格式化输入输出函数。&&& 13、fread,fwrite:从流中读取count个指定长度的元素到数组中、把数组中的count个指定的长度的元素写入到流中,返回实际读取或写入的项数。&&& 14、feof,ferror,clearerr:判断流是否到达末尾(到达返回非0,没到达返回0)、返回流的错误状态(有错误返回非0,没错误返回0)、清除流中的任何文件结束标志或错误标志。&&& 15、remove,rename:删除指定文件、重命名指定文件。&&& 16、tmpfile,tmpnam,L_tmpnam,TMP_MAX:tmpfile生成一个临时文件并以可读方式打开,文件关闭或程序终止时文件会被删除、tmpnam生成一个不与当前各个文件名冲突的新文件名,保存在参数buf中、L-tmpnam为buf的最小字符个数、TMP_MAX为连续调用tmpnam的最大次数,不小于25。&&& &&& 每个标准I/O函数的代码并不长,因为glibc在内部实现了一个基本的I/O库,标准I/O函数都是调用这些内部函数来完成工作的。所有的内部函数接口都在iolibio.h中声明,基本上每个标准I/O函数都对应一个内部函数。内部函数名在标准函数名前加了__IO_字样,数据流类型也使用内部__IO_FILE类型,标准的FILE类型就是直接用__IO_FILE类型定义的。libio.h中则声明了一些内部实现需要使用的类型和常量,strfile.h声明了与缓冲区、缓冲字符有关的一些特性。相关资料:|||||||C标准库源码解剖(13):输入输出函数stdio.h来源网络,如有侵权请告知,即处理!编程Tags:                &                    2013计算机二级考试C语言辅导:数据的输入与输出,输入输出函数的调用
数据的输入与输出,输入输出函数的调用   1.C语言本身没有提供输入、输出操作语句。C程序的输入和输出完全依靠调用C语言的标准输入、输出函数来完成。四个常用的输入、输出函数是:   printf函数、scanf函数、putchar函数、getchar函数   2.printf函数是C语言提供的标准输出函数,它的作用是在终端设备(或系统隐含指定的输出设备)上按指定格式进行输出。Printf函数的一般调用形式如下:   printf(格式控制,输出项表)   如果在printf函数调用之后加上″;″,就构成了输出语句。   格式控制参数以字符串的形式描述,由两部分组成:   ①普通字符:将被简单地显示;   ②格式字符:将引起一个输出参数项的转换和显示,由“%”引出并以一个类型描述符结束的字符串,中间可加一些可选的附加说明项,如下表所示。   附加说明项   附加说明项   说 明   -或+ 用于指定是否对齐输出,具有“-”符号表示左对齐,无“-”或有“+”表示右对齐   0 用于指定是否填写0,有此项表示空位用0补充,无此项表示以空格补充   m.n 用于指定输出域宽及精度,m是指域宽,n为精度,当指定n时,隐含的精度为6位   L或h 用于输出长度修正。其中,l对于整型是指long,对实型是h只用于整型的格式字符,并修正为short型   格式字符用于指定输出项的数据类型及输入格式,如下表所示。   注意:编译程序只是在检查了printf函数中的格式参数后,才能确定有几个输出项,是什么类型、以什么格式输出。在序时,应使输出格式与输出项对应。   格式字符   格式字符   说 明   CcD 输出一个字符   d或I 输出带符号的十进制整型数   OoO 以八进制无符号形式输出整型数(不带前导0)   x或X 以十六进制无符号形式输出整型数(不带前导0x或0X),对于x,用abcdef输出十六进制数码;对于X,用ABCDEF输出十六进制数码   UuU 按无符号的八进制形式输出整型数   FfF 以小数的形式输出单精度或双精度数,小数位由精度指定,隐含的精度为6;如指定精度为0,则小数部分(包含小数点)都不输出   e或E 以指数形式输出单精度及双精度数,小数位数由精度指定,隐含的精度为6;如指定精度为0,则小数部分(包含小数点)都不输出   g或G 由决定是采用%f不是采用%e格式,以便使输出宽度最小   SsS 输出字符串中的字符,直到遇到″\0″时为止,或输出指定的字符数
  PpP 输出变量的内存地址   % 打印一个%   3.scanf函数是C语言提供的标准输入函数,它的作用是在终端设备(或系统隐含指定的输入设备)上输入数据。Scanf函数的一般调用形式是:   scanf(格式控制,输入项表)   如果在scanf函数调用之后加上″;″,就构成了输入语句。   格式控制是用双引号括起来的字符串,称为格式控制串。格式控制串的作用是指定输入时的数据转换格式,即格式转换说明。格式转换说明是由″%″符号开始,其后是格式描述符。   输入项表中的各输入项用逗号隔开,各输入项只能是合法的地址表达式,即在变量之前加一个地址符号″&″。   在scanf函数中每个格式说明都必须用%开头,以一个″格式字符″结束。   Scanf函数中的格式控制字符与printf函数中的相似,由格式说明项与输入格式符组成。格式说明项如下表所示。   格式说明项   格式说明项 说 明   % 起始符   * 赋值抑制符,用于按格式说明读入数据,但不送给任何变量   MmM 域宽说明   l或h 长度修正说明符   scanf中的格式字符如下表所示。   格式说明项 说 明   CcC 输入一个字符   DdD 输入十进制整型数   IiI 输入整型数,整数可以是带前导0的八进制数,带前导0x(或0X)的十六进制数   OoO 以八进制形式输入整型数(可为带前导0,也可不带前导0)   XxX 以十六进制形式输入整型数(可带前导0x或0X,也可不带)   UuU 无符号十进制整数   FfF 以带小数点形式或指数形式输入实型数   EeE 与f的作用相同   SsS 输入字符串   4.putchar函数的作用是把一个字符输出到标准输出设备(常指显示器或打印机)上。一般调用形式为   putchar(ch) ;   其中ch代表一个字符变量或一个整型变量,ch也可以代表一个字符常量(包括转义字符常量)。   5.getchar函数的作用是标准输入设备(通常指键盘)上读入一个字符。一般调用形式为   getchar();   getchar函数本身没有参数,其函数值就是从输入设备得到的字符。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'&pre name=&code& class=&cpp&&//用函数指针变量完成:输入两个整数,让用户选择函数,选择1输出较大的数,选择2输出较小的数
#include &stdio.h&
int max(int x,int y)
return (x&y)?x:y;
int min(int x,int y)
return (x&y)?y:x;
int main()
int (*p)(int,int);
int a,b,c,n;
printf(&请输入两个整数:&);
scanf(&%d%d&,&a,&b);
printf(&请输入操作数(1 or 2):&);
scanf(&%d&,&n);
else if(n==2)
c=(*p)(a,b);
printf(&a=%d,b=%d\n&,a,b);
printf(&max=%d\n&,c);
printf(&min=%d\n&,c);c语言为什么要把输入输出的功能作为函数而不作为语句的基本部分?_百度知道
c语言为什么要把输入输出的功能作为函数而不作为语句的基本部分?
语言使用输入输出函数就像我们数学,它们是一种固定的形式、物理,C语言使用输入输出函数其实是为了我们编程的方便和简洁、化学理论中的公式一样,它说白了就是一个框架
其他类似问题
为您推荐:
输入输出的相关知识
其他1条回答
人觉得因为输入输出功能和操作系统打上了交道,所以才把它作为一个函数而不是基本语句,另外考虑到移植性的问题,这个不符合一个语言本质的特性
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 c语言格式化输入输出 的文章

 

随机推荐