C中输入输出函数.ppt
文本预览下载声明
Scanf函数 Scanf函数 功能: 按格式参数的要求,从标准终端上把数据传送到地址参数所指定的内存空间中. 格式: scanf(格式控制参数,地址1,地址2,……); 说明: 地址参数 C中允许程序员间接使用地址,这个地址是通过对变量名进行”求地址”运算得到的,求地址运算符为,得到的地址是一种符号地地址. 例: int a;float b; 则:a,b为两个符号地址 其中:a是取a的地址,即a的两个字节的首地址 b是取b的地址,即b的4个字节的首地址 格式控制参数 scanf函数与printf函数的参数有相同的地方,也有不同的地方; scanf的参数有两种成份:格式说明项和输入分隔符 格式说明项基本组成 % * m l或h 格式字符 输入数据类型和格式说明符 长度修正符 域宽说明符 赋值抑制符 格式说明起始符 格式字符与Printf函数的使用方式相同,把输入分为(int,用d,o,x指定)整型,实型(float,用f,e指定),字符型 (用c指定). 在整型与实型中可再加长度修正说明符:加h(短整型),加l(长整型及双精度型). m(注意没有n)用以指定输入数据的宽度. *作用是在按格式说明读入数据后不送给任何变量,即 “虚读”. 输入流数据分隔 Scanf函数从输入数据流中接收非空的字符,再转换成格式项描述的格式,传送到与格式项对应的地址中去. 当操作人员从终端上键入一串字符时,系统怎么知道哪几个字符算一个数据项呢?有以下几种方法: 根据格式字符的含义从输入流中取得数据,当输入流中数据类型与格式字符要求不符合时,就认为一个数据项结束. 例: main( ) { int a; char b; float c; printf(“input a b c:”); scanf(“%d%c%f”,a,b,c); printf(“a=%d,b=%c,c=%f”,a,b,c); } 一次执行结果: input a b c: 1234r1234.567 //带下划线为输入流 a=1234, b=r, c=1234.567 scanf首先按%d的要求取数字字符,到r时发现类型不符合,于是把”1234”转换成整型送到地址a所指的内存中,接着接收字符r送入地址b所指的1个字节内存中,最后把”1234.567” 送入c所指的4个字节内存中. 根据格式项中指定的域宽度分隔出数据项 例: main( ) { int a; float b,c; scanf(“%2d%3f%4f”,a,b,c); printf(“a=%d,b=%f,c=%f”,a,b,c); } 一次运行情况: 123456787654321 (回车) a=12,b=345.000000,c=6789.000000 由于%2d只要求读入2个数字字符,所以把12读入a所指的地址中,即变量a中;%3f要求读入3个数字,故b变量中为456.0000;%4f将要求取4个字符进入c,c中的值为6789.000. 用分隔符:空格,跳格符(‘\t’),换行符(‘\n’)都是C确定的合法分隔符. 例: main( ) { int a; float b,c; scanf(“%d%f%f”,a,b,c); printf(“a=%d,b=%f,c=%f”,a,b,c); } 一次运行情况如下: 12 345 6789 (回车) a=12,b=345.000000,c=6789.000000 C中在输入数据时,在格式符中可以使用自定义的分隔符(必须是非格式字符)来分隔数据. 例: main( ) { int a; float b,c; scanf(%d,%f,%f”,a,b,c); printf(“a=%d,b=%f,c=%f\n”,a,b,c); } 一次运行结果: 12345,678,976.38 (回车) a=1234,b=678.000000,c=976.380000 例: main( ) { int a;
显示全部