scanf和printf的用法及其常见错误

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值