printf
printf() 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表⽰可以定制输出⽂本的格式。
书写方式
在使用printf前需要输入#include <stdio.h>进行声明,printf大致可分为两种书写方式,第一种是直接书写的方法,例如:
#include <stdio.h>
int main() {
printf("你好");
return 0;
}
第二种是利用“占位符”的书写方式:
占位符介绍
在上图中%d为“占位符”,所谓 “占位符”,就是这个位置可以⽤其他值代⼊,这个值必需在引号后标明出来。另外这个值的类型必须要和前面的占位符一一对应,详情如下:
• %a :⼗六进制浮点数,字⺟输出为⼩写。
• %A :⼗六进制浮点数,字⺟输出为⼤写。
• %c :字符。
• %d :⼗进制整数。
• %e :使⽤科学计数法的浮点数,指数部分的 e 为⼩写。
• %E :使⽤科学计数法的浮点数,指数部分的 E 为⼤写。
• %i :整数,基本等同于 %d 。
• %f :⼩数(包含 float 类型和 double 类型)。
• %g :6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的 e
为⼩写。
• %G :等同于 %g ,唯⼀的区别是指数部分的 E 为⼤写。
• %hd :⼗进制 short int 类型。
• %ho :⼋进制 short int 类型。
• %hx :⼗六进制 short int 类型。
• %hu :unsigned short int 类型。
• %ld :⼗进制 long int 类型。
• %lo :⼋进制 long int 类型。
• %lx :⼗六进制 long int 类型。
• %lu :unsigned long int 类型。
• %lld :⼗进制 long long int 类型。
• %llo :⼋进制 long long int 类型。
• %llx :⼗六进制 long long int 类型。
• %llu :unsigned long long int 类型。
• %Le :科学计数法表⽰的 long double 类型浮点数。
• %Lf :long double 类型浮点数。
比特就业课 比特就业课主页:https://m.cctalk.com/inst/s9yewhfr 比特就业课-专注IT大学生就业的精品课程
• %n :已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中。
• %o :⼋进制整数。
• %p :指针。
• %s :字符串。
• %u :⽆符号整数(unsigned int)。
• %x :⼗六进制整数。
• %zd : size_t 类型。
• %% :输出⼀个百分号。
当有多个占位符出现时,后面的数值与前面的占位符的顺序一样的。如:
占位符不仅仅局限于这几种形式,对占位符进行操作我们可以达到更多的效果。
打印带加号的数字
当我们想得到一个带加号的数字时,我们可以使用%+d ,但如果是在数字前加是得不到带加号的数字的,废话不多说直接上图:
但如果我们只是想打印负数的话,直接用负数即可,并不用改变占位符。
限制小数点位数
输出⼩数时,有时希望限定⼩数的位数。举例来说,希望⼩数点后⾯只保留两位(正常是6位),占位符可以写成 %.2f 。,数字是几就限定几位。
限制宽度
在占位符中我们输入%nd(n为任意整数),可以对输出量进行限制。%nd 表⽰这个占位符的宽度⾄少为5位。如果不满5位,对应的值的前⾯会添加空格。输出的值默认是右对⻬,即输出内容前⾯会有空格;如果希望改成左对⻬,在输出内容后⾯添加空格,可以在占位符的 % 的后⾯插⼊⼀个 - 号。
最⼩宽度和⼩数位数这两个限定值,都可以⽤ * 代替,输入方式与占位符类似。
输出部分字符串
正常来说在输出字符串时结果是完整的,但是如果我们想限制字符串的长度的话我们可以⽤ %.[n]s 指定输出的⻓度(%s是字符串),其中 [n] 代表⼀个数字,表⽰所要输出的⻓度。
scanf
scanf介绍
scanf函数在代码中是一个相对灵活的函数,通过这个函数我们可以在代码执行过程中改变某个变量的值,例如:
#include <stdio.h>
int main()
{
int score = 0;
printf("请输⼊成绩:");
scanf("%d", &score);
printf("成绩是:%d\n", score);
return 0;
}
当代码运行到scanf时会出现停顿,等待你输入一个数据
输入数据后,这个值将会赋给这个变量score,此时再打印score将会打印这个新的值
常用占位符:
• %c :字符。
• %d :整数。
• %f :float 类型浮点数。
• %lf :double 类型浮点数。
• %Lf :long double 类型浮点数。
• %s :字符串。
基本用法
scanf和printf用法基本类似,使用前也是需要引用头文件<stdio.h>,它的第⼀个参数是⼀个格式字符串,⾥⾯会放置占位符(与 printf() 的占位符基本⼀致),告诉编译器如何解读⽤⼾的输⼊,需要提取的数据是什么类型。这是因为 C 语⾔的数据都是有类型的, scanf() 必须提前知道⽤⼾输⼊的数据类型,才能处理数据。数据类型请参见数据类型详解。
int a;
scanf("%d",&a);
与printf语法不同的是需要在变量前加上取地址符号&,这是因为scanf传递的是地址而不是值。
scanf处理数值占位符时,会⾃动过滤空⽩字符,包括空格、制表符、换⾏符等。所以,⽤⼾输⼊的数据之间,有⼀个或多个空格不影响 scanf()解读数据。另外,⽤⼾使⽤回⻋键,将输⼊分成⼏⾏,也不影响解读。
常见错误
1.忘加&
当你运行代码时,是可以运行的,并且并没有显示你的代码有问题,也可以正常输入数据,但按下回车时却会跳出这个弹窗
2.变量类型与占位符类型不符
此时将会出现bug,因此在使用前需要仔细了解占位符的使用,以免用错。
例如:
int a;
scanf("%f",&a);
%f是浮点型,而a却是整型,此时的代码就将无法运行,谨记。
3.%d后存在其他无关符号(仅单个%d使用时影响明显)
例如:
scanf("%d ", &score);
//或者
scanf("%d\n", &score);
有一些同学在敲代码时在这里%d后添加了空格或者换行符号,但在运行时却会产生以下bug
我们可以发现在程序中我们居然需要输入两次值,并且最终取值取了第一次的数据,bug虽小但代码一旦长了以后它的影响却是致命的,因此我们要养成正常的敲代码习惯。
其他常见错误等待补充…
赋值忽略符
在上述的错误三中如果想要添加其他无关的符号也是有办法的,这里我们就要用到赋值忽略符‘*’(星号),只要把 * 加在任何占位符的百分号后⾯,表⽰这个占位符没有对应的变量,解读后不必返回,解析后将被丢弃。
例如:
scanf("%d* ", &score);
//或者
scanf("%d*\n", &score);//即使加个加星号也不会换行
scanf的返回值
scanf的返回值是⼀个整数,表⽰成功读取的变量个数。如果没有读取任何项,或者匹配失败,则返回 0 。如果在成功读取任何数据之前,发⽣了读取错误或者遇到读取到⽂件结尾,则返回常量 EOF(一般为-1)。
int main()
{
int a,b,c,d;
d=scanf("%d%d%d", &a,&b,&c);
printf("d=%d",d );
return 0;
}
如果⼀个数字都不输⼊,直接按3次 ctrl+z ,输出的d是-1,也就是EOF