C语言输入输出函数格式详解.docx

上传人:b****5 文档编号:4317253 上传时间:2022-11-29 格式:DOCX 页数:9 大小:196.89KB
下载 相关 举报
C语言输入输出函数格式详解.docx_第1页
第1页 / 共9页
C语言输入输出函数格式详解.docx_第2页
第2页 / 共9页
C语言输入输出函数格式详解.docx_第3页
第3页 / 共9页
C语言输入输出函数格式详解.docx_第4页
第4页 / 共9页
C语言输入输出函数格式详解.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

C语言输入输出函数格式详解.docx

《C语言输入输出函数格式详解.docx》由会员分享,可在线阅读,更多相关《C语言输入输出函数格式详解.docx(9页珍藏版)》请在冰豆网上搜索。

C语言输入输出函数格式详解.docx

C语言输入输出函数格式详解

1、输入和输出:

输入:

输入也叫读,数据由核流向用户程序

输出:

输出也称写、打印,数据由用户程序流向核

以下介绍一些输入输出函数,尽管都是一些有缺陷的函数,但比拟适合初学者使用

2、printf用法(其缺陷在于带缓存)

printf输出时必须加上\n(刷新缓存)

解释:

第一幅图没有加'\n',不会刷新缓存区,如此不会打印出来;第二幅图是因为主函数完毕时刷新了缓存区,但由于没有换行符,所以没有换行便显示了后面的容;第三幅图时正常打印。

变量定义的是什么类型,在printf打印时就需要选择什么格式符,否如此会造成数据的精度丢失(隐式强转),甚至会出现错误

修饰符

功能

m

输出数据域宽,数据长度

.n

对实数,指定小数点后位数(四舍五入)

对字符串,按指定实际输出位数

-

输出数据在域左对齐(缺省右对齐)

+

指定在有符号数的正数前显示正号(+)

0

输出数值时指定左面不使用的空位置自动填0

#

在八进制和十六进制数前显示前导0、0x和0X

l

在d、o、x、X、u前,指定输出精度为long型

在e、f、g前,指定输出精度为double型

(1)格式输出函数的一般形式

函数原型:

intprintf(char*format[,argument,…]);

函数功能:

按规定格式向输出设备(一般为显示器)输出数据,并返回实际输出的字符数,假设出错,如此返回负数。

A、它使用的一般形式为:

printf("格式控制字符串",输出项列表);

B、语句中"输出项列表"列出要输出的表达式(如常量、变量、运算符表达式、函数返回值等),它可以是0个、一个或多个,每个输出项之间用逗号(,)分隔;输出的数据可以是整数、实数、字符和字符串。

C、"格式控制字符串"必须用英文的双引号括起来,它的作用是控制输出项的格式和输出一些提示信息,例如:

inti=97;printf("i=%d,%c\n",i,i);输出结果为:

i=97,a

语句printf("i=%d,%c\n",i,i);中的两个输出项都是变量i,但却以不同的格式输出,一个输出整型数97,另一个输出的却是字符a,其格式分别由"%d"与"%c"来控制。

语句printf("i=%d,%c\n",i,i);的格式控制字符串中"i="是普通字符,他将照原样输出;"%d"与"%c"是格式控制符;"\n"是转义字符,它的作用是换行。

(2)格式控制

格式控制由格式控制字符串实现,格式控制字符串由3局部组成:

普通字符、转义字符、输出项格式说明。

A、普通字符。

普通字符在输出时,按原样输出,主要用于输出提示信息。

(空格属于普通字符)

B、转义字符。

转义字符指明特定的操作,如"\n"表示换行,"\t"表示水平制表等。

\n换行

\f清屏并换页

\r回车

\tTab符

\xhh表示一个ASCII码用16进表示,其中hh是1到2个16进制数

C、格式说明局部由"%"和"格式字符串"组成,他表示按规定的格式输出数据。

格式说明的形式为:

%[flags][width][.prec][F|N|h|l]type||%[标志][输出最少宽度][.精度][长度]类型

各局部说明如下:

a、[]表示该项为可选项,即可有可无,如printf("%d",100);

b、%:

表示格式说明的起始符号,不可缺少。

c、flags为可选择的标志字符,常用的标志字符有:

-——左对齐输出,默认为右对齐输出

+——正数输出加号(+),负数输出减号(-),如省略正数的+默认不显示

0——输出数值时指定左面不使用的空位置自动填0,如省略表示指定空位不填

#——对c、s、d、u类无影响;对o类,在输出时加前缀0(数字0,八进制表示符);对x类,在输出时加前缀0x(字母为小写);对X类,在输出时加前缀0X(字母为大写);对e,g,f类当结果有小数时才给出小数点。

d、width为可选择的宽度指示符。

用十进制正整数表示设置输出值得最少字符个数。

不足如此补空格,多出如此按实际输出,默认按实际输出,例如:

printf("%8d\n",100);(前面空五格)100

printf("%08d\n",100);(前面5个0)100

printf("%6d\n",100);(前面空三格)100

printf("%-8d\n",100);100(后面空五格)

printf("%+8\n",100);(前面空四格)+100

e、[.prec]为可选的精度指示符

用“小数点〞加“十进制正整数〞表示,对“整数〞、“实数〞和“字符串〞的输出有如下功能:

对整数:

表示至少要输出的数字个数,不足在整数之前补0,多如此原样输出;

对实数:

表示小数点后至多输出的数字个数,不足在实数之后如此补数字0,多如此做舍入处理;

对字符串:

表示最多输出的字符个数,不足补空格,多如此丢弃。

由上图可以看出,对于字符串而言,其实直接使用精度指示符是没有意义的,详细解释见(3)F

f、[F|N|h|l]为可选的输出长度修饰符,其功能如下:

F——输出远指针存放的地址;

N——输出近指针存放的地址;

h——输出短整型数据的值;

l——输出长整型或双精度型数据的值。

g、type指定输出的数据类型

(3)输出数据类型说明

格式字符用以指定输出项的数据类型和输出格式。

A、d格式:

用来输出十进制整数。

有以下几种用法:

%d:

按整型数据的实际长度输出。

%md:

m为指定的输出字段的宽度。

如果数据的位数小于m,如此左端补以空格,假设大于m,如此按实际位数输出。

%ld:

输出长整型数据。

B、o格式:

以无符号八进制形式输出整数。

对长整型可以用"%lo"格式输出。

同样也可以指定字段宽度用"%mo"格式输出。

例:

intmain()

{

inta=-1;

printf("%d,%o",a,a);

}

运行结果:

-1,177777

C、x格式:

以无符号十六进制形式输出整数。

对长整型可以用"%lx"格式输出。

同样也可以指定字段宽度用"%mx"格式输出。

D、u格式:

以无符号十进制形式输出整数。

对长整型可以用"%lu"格式输出。

同样也可以指定字段宽度用"%mu"格式输出。

E、c格式:

输出一个字符。

F、s格式:

用来输出一个串,有几中用法

%s:

例如:

printf("%s","CHINA")输出CHINA字符串。

%ms:

输出的字符串占m列,如字符串本身长度大于m,如此突破获m的限制,将字符串全部输出。

假设串长小于m,如此左补空格。

%-ms:

如果串长小于m,如此在m列围,字符串向左靠,右补空格。

%m.ns:

输出占m列,但只取字符串中左端n个字符。

这n个字符输出在m列的右侧,左补空格。

%-m.ns:

其中m、n含义同上,n个字符输出在m列围的左侧,右补空格。

如果n>m,如此自动取n值,即保证n个字符正常输出。

G、f格式:

用来输出实数(包括单、双精度),以小数形式输出。

有以下几种用法:

%f:

不指定宽度,整数局部全部输出并输出6位小数。

%m.nf:

输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。

%-m.nf:

输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。

对于单精度数,使用%f格式符输出时,仅前7位是有效数字,小数6位

对于双精度数,使用%lf格式符输出时,前16位是有效数字,小数6位

H、e格式:

以指数形式输出实数。

可用以下形式:

%e:

数字局部(又称尾数)输出6位小数,指数局部占5位或4位。

%m.ne和%-m.ne:

m、n和"-"字符含义与前一样。

此处n指数据的数字局部的小数位数,m表示整个输出数据所占的宽度。

I、g格式:

自动选f格式或e格式中较短的一种输出,且不输出无意义的零。

(4)h和l前缀与u

%hd--shortint

%ld--longint

%lld--longlongint

%lu--unsignedlong

%llu--unsignedlonglong

%ho--八进制显示short整数

%lx--十六进制显示long整数

%le-以科学计数法表示longdouble

(5)特殊说明

A、需要打印%时,必须之前还要加上一个%

printf("%f%%",1.0/3);输出0.333333%

B、*的用法

a、printf("%*d\n",8,100);结果:

(前面空五格)100

b、intm=8;printf("%*d\n",m,100);结果:

(前面空五格)100

c、charch[20];printf("%*.*s\n",m,n,ch);说明:

前边的*定义的是总的宽度,后边的定义的是输出的个数。

分别对应外面的参数m和n。

我想这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。

C、%n的用法:

可以将所输出字符串的长度值赋给一个变量

intslen;printf("helloworld%n",&slen);执行后变量slen被赋值为11

3、scanf函数(主要缺陷就是在缓冲区制造垃圾字符,不建议太过复杂的用法)

(1)完毕条件

A、空格、TAB或回车

B、宽度完毕

C、非法输入(比如程序里scanf中是%d的形式,结果输入的时候输入一个浮点类型的数)

(2)格式说明符

(3)scanf函数返回正确读取的元素的个数

inta,b,c;

scanf("%d%d%d",&a,&b,&c);//不能忘了写取地址符

正确输入时其返回值为3

(4)输入的格式要与程序里的格式保持一致

inta,b,c;

scanf("%d,%d,%d",&a,&b,&c);

输入的时候要输入2,3,4才是正确的

(5)抑制符*

这里跟printf中不同,他表示指定输入项读入后不赋给变量

inta,b;

scanf("%3d%*4d%f",&a,&b);

printf("a=%d,b=%f\n",a,b);

(6)垃圾字符(详见4getchar中的解释)

 

4、字符输入输出getchar和putchar

(1)putchar

A、在理解getchar()之前,首先搞清楚一个概念:

当从键盘上输入字符(数字、字符、符号)时,系统是默认先把输入的容先存放在缓存空间上,当按下回车(Enter)键后getchar(),才开始从缓存空间逐一开始读取数据,注意getchar(),读取数据是逐一、单个读取的,也就是一次只读取一个字符的值,返回对应字符的ASCII码值。

B、理解上面容,那么:

a、如果想要检测输入的字符是哪一个,可以用getchar()和对应字符的ASCII值进展比拟,注意比拟的形式必须是:

例如:

if(getchar()!

='a'||getchar()!

='\n')的这种形式,即检测从键盘上输入的是不是a或者回车。

b、getchar()从缓存里面读取数据,直到它读取到回车键时才完毕

c、如果从键盘上输入一连串的字符

例如:

输入adndjdjejd3458jjjfkal按下回车键(他也会被getchar读取),缓存区中容为adndjdjejd3458jjjfkal\n

d、scanf()函数从缓存区读取数据的时候,不读取回车键,不返回回车键的值;getchar()函数从缓存区读取数据的时候,读取回车键,而且会将回车键的值进展返回,同时读取回车后完毕本次读入

那么,在使用完scanf或者getchar之后如果还有输入函数,甚至scanf遇到非法输入完毕,下一个函数必然会读取他们在缓冲区遗留的垃圾,这就是其缺陷所在。

(2)putchar不带自动换行

举例:

1、/*输入ab时取到的ch2是空格(输入时产生的)*/

#include

intmain(intargc,constchar*argv[])

{

charch1;

charch2;

charch3;

ch1=getchar();

ch2=getchar();

ch3=getchar();

printf("mun=%d\n",ch2);

putchar('\n');

printf("ch1=%c,ch2=%c\n",ch1,ch2);

return0;

}

5、字符串输入输出gets和puts

(1)gets函数不以空格作为字符串输入完毕的标志,而以回车作为完毕标志。

缺陷:

由于c语言中数组的长度必须事先给定,所以输入很容易超出这个长度,数组越界(这是很严重的问题)

(2)puts函数在输出字符串时,会自动追加'\n'。

使用时,注意字符数组必须以'\0'完毕。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 节日庆典

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1