菜鸟转行嵌入式_(第5天)C语言基础_输入输出函数2

215 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1.3 printf/scanf

1.3.1scanf

原型:int scanf(const char *format, ...);

格式: scanf(“格式控制串”,地址表)

功能:按指定格式从键盘读入数据,存入地址表指定存储单元中,并按回车键结束

返回值:int,返回成功读取的参数个数,失败返回EOF

地址表:变量的地址,常用取地址运算符&

注意:scanf支持的格式字符很多,比如:

i/d:十进制整数
x/X:十六进制无符号整数
0:八进制无符号整数
u:无符号十进制整数
c:单一字符
s:字符串
e:指数形式浮点小数
f:小数形式浮点小数
scanf函数支持的格式说明符可以带以下修饰符:
h:用于d,o,x前,指定输入为short型整数
l:用于d,o,x前,指定输入为long型整数
  用于e,f前,指定输入为double型实数
m:指定输入数据宽度,遇到空格或不可转换字符结束*
*:抑制符,指定输入项读入后不赋给变量
1
scanf(“%4d%2d%2d”,&yy,&mm,&dd);
若输入19991015
则yy为1999, mm为10, dd为152
scanf(“%2d %*3d %2d”,&a,&b); //重点
若输入12 345 67
则a为12,b为67

说明: 用“%c”格式符时,空格和转义字符作为有效字符输入,%d等没有影响

例子,
scanf(“%c%c%c”,&c1,&c2,&c3);
若输入a b c   
则c1为a, c2为空格, c3为b

总结:输入数据时,遇以下情况认为该数据结束

遇空格、TAB、或回车
遇非法输入
遇宽度结束
例子:
ret=scanf(“%d%c%f”,&a,&b,&c);
若输入1234a123o.26
则a为1234, b为‘a’, c为123

1.3.2printf

printf:向屏幕输出内容(输出)

函数原型:

int printf(const char *format, ...);

返回值:int,执行成功返回输出到终端的字符个数,失败返回一个负数

形式参数:format表示函数输出的时候的格式表,通常用双引号引起来,这部分内容正常输出到终端,如果有占位符,则需要在引号外加上参数

…:表示可变参数,当format当中没有占位符的时候,此时可变参数为0,不需要写内容,可变参数个数和format中的占位符个数一致

printf("DC20101班有%d个学生",10);

格式说明:%[修饰符]格式字符,用于指定输出格式

普通字符:原样输出

占位符:预留位置用来进行打印处理

%c:char
%d:shortintlong
%ld:long int
%f:float
%lf:double
%g:打印浮点型的有效位,只能在打印中使用
%s:字符串,从当前地址开始,一直打印到\0结束
%p:打印地址(十六进制的数)
%%:打印%
%u:打印无符号整数
%e:科学计数法
%o:打印八进制数
%x:打印十六进制数
#:打印进制的表示符号
o:0XXX
%#x:0xXXX
int a=567;printf ( “%d”,a);	        //567
int a=255;printf(“%x”,a); 		//ff
int a=65;printf(“%o”,a); 		//101
int a=567;printf(“%u”,a); 		//567
char a=65;printf(“%c”,a);		//A
printf(“%s”,“ABC”); 		        //ABC
float a=567.789;printf(“%e”,a);	//5.677890e+02
float a=567.789;printf(“%f”,a);	// 567.789000
float a=567.789;printf(“%g”,a);	// 567.789
printf(“%%”);			        //%

%md:打印出来的整数占m位,不够m位的时候在左侧补空格,如果数值本身超出m位,正常打印

%m.nf:打印出来的浮点数占m位,n表示小数点保留位数,不够的时候在左侧补空格,n位不够的时候在右侧补0

例  m.n
int a=1234;
float f=123.456;
char ch=‘a’;
printf(“%8d,%2d\n”,a,a); //    1234;1234
printf(“%f,%8f,%8.1f,%.2f\n”,f,f,f,f);
//123.456; 123.456;   123.5;123.46;
printf(“%3c\n”,ch); //  astatic char a[]=“Hello,world!”
printf(“%s\n%15s\n%10.5s\n%2.5s\n%.3s\n”,a,a,a,a,a);
运行结果:Hello,world!
           Hello,world!
               Hello //整体十个,保留五个字符
          Hello
          Hel 
例  0(输出数值时指定左面不使用的空位置自动填零) 、+(指定在有符号数的正数前显示正号)
int a=1234;
float f=123.456; 
printf(“%08d\n”,a); 
printf(“%010.2f\n”,f); 
printf(“%0+8d\n”,a);    
printf(“%0+10.2f\n”,f); 

2.清缓存

使用输入函数可能会留下垃圾
int x;
char ch;
scanf(“%d”,&x);
scanf(“%c”,&ch); //上一个scanf中回车有缓存垃圾,对%c有影响
printf(“x=%d,ch=%d\n”,x,ch);

方法1:用getchar()清除

 int x;
 char ch;
 scanf(“%d”,&x);
 getchar();//清缓存
 ch=getchar(); //拿到ch字符
 printf(“x=%d, ch=%d\n”, x, ch);

方法2:用格式串中空格或“%*c”来“吃掉”

int x;
char ch;
scanf(“%d”,&x);
scanf(“  %c”,&ch);或 scanf(“%*c%c”,&ch);

注意:

1.%*c
会拿取一个字符不处理,但是仅拿一个

2.空格
会忽略多个间隔符(空格、tab)

 a空格空格tabc
 scanf("%c %c",&a,&b);```

3.getchar()清缓存一般放在scanf输入函数的后面			

### 3.换行
		putchar('\n');
		putchar(10);
		printf("\n");
		puts("");