当前位置:   article > 正文

printf与scanf语句讲解_一个printf接一个scanf吗

一个printf接一个scanf吗

printf()用法

printf == print format 表示打印格式

printf()作用是把双引号里面参数打印出来
上代码

printf("hello world");
  • 1

在这里插入图片描述看这就是上面的打印结果
scanf()这个语句输出后自动换行(这里咱们先知道一下,下面会讲)
printf()不会输出后在屏幕中换行,如果我们想要换行可以在末尾加\n(换行符)

printf(“hello world\n”);
  • 1

看下面打印结果画横线的地方就换行了
在这里插入图片描述

printf("hello\nworld\n");
  • 1

上面代码写的作用可以把hello打印成一行,world打印一行,
在这里插入图片描述
要用到printf()语句,我们要在上面加上#include<stdio.h>,因为printf()语句是标准库的头文件stdio.h定义的,调用函数就要用到头文件。

占位符

占位符有 %d %f %s %c等等我们就讲这些常用到的

	printf("%d\n",4);
	printf("%f\n",5,2);
	printf("%s\n","hello");
	printf("%c",'w');
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
大家看完代码和输出结果相信就会理解了。
占位符就是这个位置可以被其他值代入入

printf("there is %d",3);//这里的3就代入了前面的%d
  • 1

%d表示代入整型
%f表示代入浮点型
%s表示代入字符串
%c表示代入字符

在这里插入图片描述
看上面图片我们可以得知占位符是和后面的数据一 一对应的,占位符也是可以输入多个的。

printf()允许占位符限定的最小宽度(***最小是重点)

例如

printf("%5d",123);
  • 1

在这里插入图片描述

%5d表示的是一共占5的空格,打印结果看不好,它是 (空格空格123)一共占五个。
那%3毋庸置疑就是占三个直接打印123
数据不够宽度默认向前补零(右对齐),这时就是小伙伴好奇了,不能向后补零(左对齐)吗!我的回答是当然可以!只需要在%d前加上-号

printf("-%5d",123);
printf("lll")//我们在后面加上这个打印结果能清晰的看出
  • 1
  • 2

在这里插入图片描述
注意:printf()语句占位符限定的时最小宽度
例如:123456,超出%5d这个最小宽度,会全部打印

printf("%5d",123456);
  • 1

在这里插入图片描述

printf()语句中对+ -号的输出

printf("%d",+1);
printf("%d",-1);
  • 1
  • 2

在这里插入图片描述
printf()中的+1是不会显示出来的,只需要在%d中间加上+,在输出的-号的时候也可以加,输出结果不会改变

printf("%+d",+1);
printf("%+d",-1);
  • 1
  • 2

在这里插入图片描述

限定小数的位数
printf("%.2f",2.0f);
  • 1

在这里插入图片描述
很简单吧,跟上面%d限定整数宽度一样是几就是几的宽度,记得数子前加.
浮点型默认小数点保留是六位,上面%.2f就是保留两位小数

可以这么写
printf("%5.2f",0.5);
  • 1

在这里插入图片描述
记住小数点前面的数字是整体数值的宽度,小数点后面的数字是小数点的宽度或是位数

最小宽度和小数点位数可以用*号传递
printf("%*.*f\n",6,2,0.5);//和上面输出结果一致
  • 1

在这里插入图片描述

输出部分字符串

printf(“%.2s”,"hello";//保留的前俩字母
  • 1

在这里插入图片描述

scanf()语句

scanf()用于用户键盘的输入,然后把输入值存到变量
程序运行到这个语句会停下来,等待用户的输入,把输入的数据放到缓存中,等到用户按下回车,才会执行。

int a = 0;
scanf("%d",&a);//这里是输入a的值
printf("%d",a);//输出
  • 1
  • 2
  • 3

在这里插入图片描述

注意

scanf()语句解读用户输入时,会从上一次解读遗留的第一个字符开始或者遇到第一个不符合条件的字符开始。这句话怎么解读来看一个例子

//我们来输入" -3.1445e12# 0"
int a = 0;
float f1 = 0.0f;
scanf("%d",&a);
scanf("%f",&f1);
printf("%d\n", a);
printf("%f\n", f1);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
这时小伙伴肯定懵了吧,what?输入一个数据怎么会能输出俩个结果
咱们先来对这代码来对上面的话解读

第一个输出是3,因为第一个scanf(“%d”,&a);

中%d是代入的是整型的结果,下面的输出会打印-3,接下来第二个scanf()语句会从上一个遗留下来的字符开始解读或是上一个不符合条件的第一个字符,就是从小数点开始到#号结束,因为第二个scanf语句中有%f,
它就会解读浮点型到#结束,也就会变成0.1445e12,那同学就有疑问了
你这和打印结果不同啊,是因为e12表示10的12次方,屏幕上的e12*到了0.1445上,就变成了打印结果的样子。
同学们是不是恍然大悟!!!

scanf()语句也是有返回值的,它的返回值是它成功读取变量的个数

int a = 0;
float b = 0.0f;
int r = scanf("%d%f",&a,&b);
printf("r=%d",r)
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

如果没有读取任何项,或者匹配失败,则返回 0 。如果在成功读取任何数据之前,发⽣了读取错误或者遇到读取到⽂件结尾,则返回常量 EOF。
还是一样上代码理解

int a = 0;
float b = 0.0f;
int r = scanf("%d%f",&a,&b);
printf("r=%d",r)
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
按俩次ctrl+z 出现r=1,表示成功读取一个变量ctrl+z结束退出,为什么是俩次呢,是因为vs编译器的问题,有些编译器是一次就可以。
然后按三次
在这里插入图片描述
这里就是-1
在看一下下面的话
在这里插入图片描述
E0F就是-1

在这里插入图片描述

scanf()会忽略空白字符的

什么叫空白字符就是在打印输入的时候输入看不见的字符,这种说法就很简单易懂了吧。

除了%c不会忽略空白字符

char a = 0;
	scanf("%c", &a);
	printf("%c", a);
	
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述在这里插入图片描述
!](https://img-blog.csdnimg.cn/fba97db5c3714192a1b365d5021a0901.png)
这里输出的就是空格,不会忽略空白字符,(字符只占1位)

如何能让%c忽略空白字符

前面加上空白字符

char a = 0;
	scanf("% c", &a);//%c前加了空格
	printf("%c", a);
  • 1
  • 2
  • 3

在这里插入图片描述
多个空格也是可以
在这里插入图片描述

赋值忽略符%*

在这里插入图片描述
###双引号里的格式要与打印输入格式相同否则出现下面情况

在这里插入图片描述
##也可以用*号解决,就不用按双引号的格式

int score = 0;
	int number = 0;
	scanf("%d%c*%d", &score, &number);
	printf("%d %d", score, number);
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
分开

在这里插入图片描述

分开

在这里插入图片描述
注意这个%*d格式要写出,不然会出现上面

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/913287
推荐阅读
  

闽ICP备14008679号