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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: scanf() 函数是 C 语言中用于从标准输入(键盘)读取数据的函数。其基本语法为: ```c scanf("格式化字符串", &变量1, &变量2, ...); ``` 其中,格式化字符串用于指定输入的数据类型和格式,变量1、变量2 等是用于存储读取数据的变量。 举个例子,如果要读取一个整数,可以使用以下代码: ```c int num; scanf("%d", &num); ``` 在这里,"%d" 表示读取一个整数,&num 表示将读取到的整数存储到 num 变量中。 除了读取整数外,scanf() 函数还可以读取其他类型的数据,如浮点数、字符等。在格式化字符串中,可以使用以下格式说明符: - %d:读取十进制整数 - %f:读取浮点数 - %c:读取一个字符 - %s:读取一个字符串 - %p:读取一个指针 需要注意的是,如果读取的数据类型和格式化字符串不匹配,就会导致读取错误或产生未定义行为。此外,scanf() 函数也存在一些安全性问题,因为它没有对输入数据的长度进行检查,可能会导致缓冲区溢出等问题。建议在使用时进行输入合法性检查。 ### 回答2: C语言中的scanf函数是一个输入函数,用于从标准输入设备(通常为键盘)接收用户输入的数据,并将其存储到指定的变量中。scanf函数的语法格式为: scanf("格式控制字符串", 参数列表); 其中,格式控制字符串用于指定输入数据的类型和格式,参数列表则是要接收输入数据的变量名。 常用的格式控制字符包括: %c:接收一个字符; %d:接收一个带符号10进制整数; %f:接收一个浮点数; %s:接收一个字符串(以空格或回车为分隔符); %lf:接收一个双精度浮点数; %ld:接收一个带符号10进制长整数等。 例如,以下代码片段演示了scanf函数的使用: ```c #include <stdio.h> int main() { int num; printf("请输入一个整数:"); scanf("%d", &num); printf("您输入的整数是:%d\n", num); return 0; } ``` 在这个例子中,首先使用printf函数打印出提示语句,然后使用scanf函数接收用户输入的整数,并将其存储到变量num中,最后使用printf函数再次打印出用户输入的整数。 需要注意的是,scanf函数对输入的数据有一定的要求和限制,例如,如果输入的数据类型与格式控制字符串中指定的类型不匹配,可能导致程序出错。 此外,scanf函数还可以通过指定修饰符(如*)来跳过某些输入项,或者使用中括号[]指定输入数据范围等特定用法。总之,scanf函数是一个非常有用和灵活的输入函数,可以方便地接收用户的输入并进行后续处理。 ### 回答3: scanfC语言中的一个输入函数,用于从标准输入设备(通常是键盘)获取用户输入的数据。 使用scanf函数需要包含头文件<stdio.h>。它的基本语法是:scanf("格式控制字符串", 输入参数列表); 格式控制字符串用于指定输入数据的类型和格式。常见的格式控制符有:%d(整数类型)、%f(浮点数类型)、%c(字符类型)、%s(字符串类型)等。输入参数列表则是各个变量的地址,用于接收输入的数据。 例如,要求用户输入一个整数并存储到变量num中,可以使用以下代码: ``` int num; printf("请输入一个整数:"); scanf("%d", &num); ``` 在格式控制字符串中,%d表示输入的是一个整数,&num表示num的地址,用于接收输入的整数值。 需要注意的是,scanf函数输入数据时会遇到空格、制表符和换行符等空白字符时会停止输入,因此它不适用于输入带有空格的字符串。若需要输入带有空格的字符串,可以使用fgets函数。 此外,scanf函数还可以一次性接收多个输入,只需在格式控制字符串中按顺序添加相应的格式控制符即可。 需要注意的是,使用scanf函数时需要考虑输入错误的处理。当输入的数据类型与格式控制字符串中指定的类型不一致时,将导致输入失败并返回错误。因此,在使用scanf函数时应进行错误处理,以确保程序的健壮性。 综上所述,scanf函数是C语言中用于从标准输入设备获取用户输入数据的函数,可以根据需要指定不同的格式控制字符串来接收不同类型的数据,并使用相应的地址将输入的数据保存到变量中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值