《初学C语言》第三讲:printf函数和scanf函数

思维导图

思维导图

一.printf()函数

1.概念

(1)printf = print(打印) + format(格式化),表示可以定制输出文本样式
(2)printf () 的头文件为 <stdio.h>

2.基本用法

将参数文本输出到屏幕,如打印:hello world

#include<stdio.h>intmain(){printf("Hello world");return0;}

3.占位符

当出现占位符时,这个位置就可以用其他值代替

3.1 基本用法

(1) 占位符是由 % + 字符(表示占位符的类型)构成,如:%d 表示整数
(2)每当有一个占位符,就必须有相应类型的值来代替
#include<stdio.h>intmain(){printf("There are have %d appels",3);return0;}

3.2 printf() 参数

printf 参数是由printf“”里的内容作为一个参数和占位符的个数作为参数

注:printf()参数与占位符是一一对应关系,如果有n个占位符,printf()的参数就应该有 n+1 个。

3.3 常见占位符列举

%d:十进制整数(有符号的十进制整数)
%f: 小数(float类型)
%lf: 小数(double类型)
%hd:十进制short int类型
%hu:unsigned short int类型
%ld:十进制long int类型
%lu: unsigned long int类型
%Lf:long double类型
%p:指针(用来打印地址)
%c:字符
%s:字符串
%u:无符号整数(unsigned int)
%zu:size_t 类型
%%:输出一个百分号

4.输出格式

printf() 可以定制占位符的输出格式

4.1整数限宽

%n(数字)d表示这个占位符的宽度至少是n位,如果不满n位,对应的值的前面会添加空格。输出的值默认是右对齐,少几个值就会添加几个空格;如果改成左对齐,即在输出内容后面添加空格,操作是在占位符的%的后面加一个 - 号

#include<stdio.h>intmain(){printf("%5d\n",123);// 123(打印两个空格)printf("%-5d",123);//123 (3后面打印两个空格)return0;}

4.2小数(整数与小数)限宽(默认小数点后面保留6位)

%n(数字)f表示输出的浮点数至少占据n位,同样默认也是右对齐,如果不满n位,少几个值就加几个空格(与整数限宽规则一样)

#include<stdio.h>intmain(){printf("%12f\n",123.45);// 123.450000(打印两个空格)return0;}

4.3正负号

默认情况情况下,printf() 不对正数显示,只显示负号(-);如果想正数也显示,则在占位符的%后面加一个+

#include<stdio.h>intmain(){printf("%+d\n",5);// +5return0;}

4.4小数位限宽

(1)如果一个小数部分只有两位,且我们只想限定小数后面只保留两位,占位符可以写成%.2f
#include<stdio.h>intmain(){printf("%.2f\n",123.45);//123.45return0;}
(2)当小数点后面比我们要保留的值多,则遵循四舍五入法则
#include<stdio.h>intmain(){printf("%.2f\n",123.456);//12.46return0;}

4.5小数位与整数部分一起限宽

(1)如%7.2f表示输出最小宽度为7,小数位为2
#include<stdio.h>intmain(){printf("%7.2f\n",123.45);// 123.45(打印1个空格)return0;}
(2)最小宽度和小数位数这两个限定值,都可以用 * 代替,通过printf()的参数输入
#include<stdio.h>intmain(){printf("%*.*f\n",7,2,123.45);// 123.45(打印1个空格)return0;}

4.6字符串限宽

%s默认输出全部字符串,如果只想输出一部分字符串,格式为%.n(数字)s指定输出

#include<stdio.h>intmain(){printf("%.5s\n","hello world");//helloreturn0;}

二.scanf() 函数

1.概念

(1)当创建了变量,给变量输入值就可以使用scanf函数
(2)头文件为 <stdio.h>

2.基本用法

(1)一般语法形式
```c int i = 0; scanf("%d", &i);
  • %d:表示存放的是整型
  • " " :表示 " " 里有多少个占位符,就有多少个变量
  • &i :表示将用户从键盘输入的整数存入变量 i
scanf("%d%d%c%c",&i,&j,&x,&y);

表示的是用户前两位输入的是整数,后两个是字符,这四个值依次放入 i, j, x, y四个变量

(2)特殊语法形式:变量为指针变量
```c char name[10]; scanf("%s",name);
  • name :指针变量(字符串变量)
  • %s:表示存放的是字符串
(3)scanf处理占位符时,会自动过滤空白字符,包括空格、制表符、换行符等
#include<stdio.h>intmain(){inti=0;intj=0;scanf("%d%d%",&i,&j);//10 20 或 //10//20printf("%d\n",i);//10printf("%d\n",j);//20return0;}
(4)scanf读取数据时,依次按照占位符的顺序读取,读取数据时会从上一次遗留的第一个字符开始,直到读完为止,或者遇到第一个不符合条件的字符为止
#include<stdio.h>intmain(){inti=0;floatj=0;scanf("%d%f",&i,&j);//13.45printf("%d\n",i);//13printf("%f\n",j);//0.450000return0;}

3.scanf的返回值

3.1scanf() 的返回值是一个整数,表示成功读取的变量个数。

3.2如果没有读取任何项,或者匹配失败,则返回0

3.3如果在成功读取任何数据之前,发生了读取错误或者遇到读取文件结尾,则返回常量值EOF(-1).EOF-end of file文件结束标志

#include<stdio.h>intmain(){inta=0;inti=0;intj=0;intx=scanf("%d%d%d",&a,&i,&j);//1 2 3printf("a=%d i=%d j=%d\n",a,i,j);//a = 1 b = 2 c = 3printf("%d",x);//3return0;}

4.在scanf中一些占位符特殊的特征

4.1 %c :字符

(1)只有%c不会自动忽略起首的空白字符,总是返回当前第一个字符,无论该字符是否为空白字符
#include<stdio.h>intmain(){charch=0;scanf("%c",&ch);//输入空格printf("----%c----\n",ch);//---- ----return0;}
(2)强制跳过字符前的空白字符,格式为scanf(" %c",&ch),即%c前加一个空格,表示跳过零个或多个字符
#include<stdio.h>intmain(){charch=0;scanf(" %c",&ch);// cprintf("----%c----\n",ch);//----c----return0;}

4.2%s :字符串

字符串(从当前第一个非空白字符开始读起,直到遇到空白字符(空格、换行符、制表符等)停止)

#include<stdio.h>intmain(){chararr[10];scanf(" %s",arr);//abc defprintf("%s\n",arr);//abcreturn0;}

4.3%[ ] :匹配的字符

在方括号指定一组匹配的字符(如:[a-zA-Z]),遇到不在集合里的字符,匹配将会停止

#include<stdio.h>intmain(){chararr[100];scanf(" %[a-zA-Z]",arr);//abcd1234defgprintf("%s\n",arr);//abcdreturn0;}

4.4%n(数字)s :指定字符串长度

#include<stdio.h>intmain(){chararr[5];scanf(" %4s",arr);//abcdefprintf("%s\n",arr);//abcdreturn0;}