1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > c语言---输入输出函数 printf scanf 及输入输出控制符

c语言---输入输出函数 printf scanf 及输入输出控制符

时间:2018-09-13 04:52:14

相关推荐

c语言---输入输出函数 printf scanf 及输入输出控制符

printf

# include <stdio.h>int printf(const char *format, ...);int printf("输出控制符 非输出控制符",输出参数);

printf:自右向左压栈,故从右往左运算

后缀++会在数据入栈后生效,而不是要等到整条语句完全执行结束后才生效

实例1:

#include<stdio.h> void main() {int i=2; printf("%d,%d,%d,%d,\n",i++,++i,i,i++); //3 3 2 2printf("%d\n",i); //5} 解析:printf("%d,%d,%d,%d,\n",i++,++i,i,i++); 从右往左运算: i++得到2(i=2,后加1在整条语句执行完才进行,这里先记下) i还是2 (i=2,原因见上一行) ++i得到3(i=3,先加1,后使用) i++得到3(i=3,后加1在整条语句执行完才进行,这里先记下) 所以输出结果为:3,3,2,2 然后计算刚才的两次后自增运算后,i=5 printf("%d\n",i); 所以,结果是5

实例2:

int a=5,b=2;printf("%d %d\n",b=a+1,a=a+1);//结果为7 6 而不是6 6证明了printf是从右向左入栈int i=7; printf("%d\n", i++ * i++); //输出结果是:49而不是56int i=7;printf("%d %d %d\n",++i,i,i++);//输出结果是:9 9 7 后缀++的效果会在右侧数据入栈后生效

printf中的输出控制符

%[标志][最小宽度][.精度][类型长度]类型

左右对齐:1、%d 左对齐2、%10d右对齐并占用10格最小数字宽度为10,如果要打印的位数小于10,左边补足空格;如果要打印的位数大于10,则打印所有的数字,不会截断。3、%-10d左对齐并占用10格最小数字宽度为10,如果要打印的位数小于10,则在后面补足空格;如果要打印的位数大于10,则打印所有的数字,不会截断。%p打印地址, 指针优先使用%p 其次才是%x%d按十进制整型数据的实际长度输出。%ld输出长整型数据。%mdm 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补以空格,若大于 m,则按实际位数输出。%u输出无符号整型(unsigned)。输出无符号整型时也可以用 %d,这时是将无符号转换成有符号数,然后输出。但编程的时候最好不要这么写,因为这样要进行一次转换,使 CPU 多做一次无用功。%c一个字符。%f用来输出实数,包括单精度和双精度,以小数形式输出。不指定字段宽度,由系统自动指定,整数部分全部输出,小数部分输出 6 位,超过 6 位的四舍五入。%.mf输出实数时小数点后保留 m 位,注意 m 前面有个点。%o以八进制整数形式输出%s输出字符串。用 %s 输出字符串同前面直接输出字符串是一样的。但是此时要先定义字符数组或字符指针存储或指向字符串,这个稍后再讲。%x(或 %X 或 %#x 或 %#X)以十六进制形式输出整数,这个很重要。printf("%x\n", i); 2fprintf("%X\n", i); 2Fprintf("%#x\n", i); 0x2fprintf("%#X\n", i); 0X2Fscanf("%x\n",i);(以16进制形式)可以直接接受0x12 等价于12特定内容的输出:printf("%%d\n");👉%dprintf("\\\n");👉\printf("\"\"\n")👉""

scanf

int scanf(格式控制,变量地址);

1、若格式控制内有特定字符,则输入时也应相应输入

例如scanf( “%d,%d”, &a, &b); 则应输入3,4

2、需要的是变量地址&a 而不是变量名a(要存放到指定地址中去)

scanf( “%d%c%f”, &a, &b, &c);

3、%c接收时会将 空格字符和转义字符当做有效字符输入

scanf( “%c%c%c”, &c1, &c2, &c3);

如输入:a b c 。字符 ‘a’ 赋给c1,字符(空格)’ ’ 赋给c2,字符 ‘b’ 赋给c3。

4、[]的使用:①只读取[]中的字符,一旦发现不符合的字符则终止,后面的不要了

②[]内顺序无所谓且可用“-”👉👉[123]≈[321]≈[1-3]≈[3-1] 若只要字母可用[A-Za-z]

③[]内只能是字符,不能是数字👉[3-14]约等于[3214]

例如:const char* p = “12232114687ABC12356”;

scanf( “%[123]”, buf); // 于是执行后buf应该是"1223211";

5、[]中的^表示“不要”👉 比如%[^A-Za-z]的意思就是取字母之外的所有字符。

6、%s遇到空白字符(空格、制表符、\r、\n)就结束了

故若要取一行字符,可以用 %[^\n]%*c(此时接收的字符串包含空格、制表符、回车\r,而%c抵消换行\n)

7、%[^\n]%*c就表示跳过一行

8、%-20[^\n]就表示读取\n前20个字符。

scanf中的格式控制符

% * m l(long int)/无(int)/h(short int) 格式字符:u(unsigned) d(十进制) o(八进制) x(十六进制) f(float) lf(double) e(指数float)/le(指数double) g(小数float)/lg(小数double)s(字符串)c(char)2、域宽:指定输入数据所占列宽,系统自动按它截取所需数据。如:scanf( "%3d%3d", &a, &b);输入:123456系统自动将123赋给a,456赋给b。scanf( "%d%c%f", &a, &b, &c);如果输入如下信息:1234r1234.567则把“1234”转换成整型赋值给a,把“r”赋给变量b,最后把“1234.567”转换成实型数据赋给c。3、%后的“*” 附加说明符,用来表示跳过它相应的数据(接收但扔掉)。例如:scanf( "%2d%*3d%2d", &a, &b);如果输入如下信息:1234567。将“12 ”赋给a,“67 ”赋给b。第二个数据“345”被跳过不赋给任何变量。4、输入数据时不能规定精度,例如:scanf( "%7.2f", &a);是不合法的,不能企图输入:12345.67而使a的值为12345.67。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。