printf和scanf介绍

printf

基本用法
printf是在标准库stdio.h中定义的。
printf的作用是将参数文本输出到屏幕
f代表format(格式化),表示定制输出文本格式。
printf 不会自动在行尾自动添加换行符,所以需要在文本结尾添加\n

占位符

在此位置可以用其他值代入

//输出 There are 3 apples.
#include<stdio.h>
int main()
{
 	printf("There are %d apples.\n",3);
 	return 0;
}
\\There are %d apples.为输出文本
%d为占位符 用3来替代%d

• %a :⼗六进制浮点数,字⺟输出为⼩写
• %A :⼗六进制浮点数,字⺟输出为⼤写
• %c :字符。
• %d :⼗进制整数。// int
• %e :使⽤科学计数法的浮点数,指数部分的 e 为⼩写
• %E :使⽤科学计数法的浮点数,指数部分的 E 为⼤写
• %i :整数,基本等同于 %d
• %f :⼩数(包含 float 类型和 double 类型)。//float %f double - %lf
• %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 类型浮点数
• %n :已输出的字符串数量。该占位符本⾝不输出,只将值存储在指定变量之中
• %o :⼋进制整数
• %p :指针(⽤来打印地址)
• %s :字符串
• %u :⽆符号整数(unsigned int)
• %x :⼗六进制整数
• %zd : size_t 类型
• %% :输出⼀个百分号

printf()参数与占位符是一一对应的关系
如果有n个占位符,printf()的参数就应该有n+1个。
如果参数个数少于对应占位符,printf()可能会输出内存中的任意值。

输出格式

printf ( )可以定制占位符的输出格式
限定宽度
printf()允许限定占位符的最小宽度

#include<stdio.h>
int main()
{
	printf("%5d\n",123);  //%5d表示该占位符的宽度至少为5位
 	return 0;			//若不为5位,对应值前面会添加空格	
 }						

若所输出的值不满足限定占位符的最小宽度
输出的值默认为右对齐,即输出的内容前面会有空格
若希望改成左对齐,即在输出的内容后面有空格,可在占位符%的后面插入一个-(负号)
如:printf(“%-5d\n”,123)

#include<stdio.h>
int main()
{
	printf("%12f\n",123.45);  //输出结果为123.450000
 	return 0;			//输出结果的头部会添加两个空格
 }						

显示正负号

默认情况下,printf()不对正数显示+号,只对负数显示-号
若想让正数也显示+号。可以在占位符的后面加+号

#include<stdio.h>
int main()
{
	printf("%+d\n",12);     //输出12
	printf("%+d\n",-12);    //输出-12
 	return 0;			    // %+d可以确保输出的数值,总带有正负号
 }						

限定小数位数
输出小数的时候,限定小数的位数。

//输出的值为0.50
#include<stdio.h>
int mian()
{                            //%6.2f表示输出字符串最小宽度为6,小数位数为2
	printf("%6.2f\n",0.5);  // 输出字符串的头部有两个空格
	return 0;
}
//输出的值为0.50
#include<stdio.h>
int mian()
{                           
	printf("%*.*f\n",6,2,0.5);  // 等同于 printf("%6.2f\n",0.5);
	return 0; 					//% *.*f的两个星号通过printf的两个参数6和2传入
}

输出部分字符串
%s占位符用来输出字符串,默认是全部输出
若只想输出开头部分,可以用%.[m]s指定输出长度
[m]代表一个数字,表示所要输出的长度

//输出hello
#include<stdio.h>
int main()
{
	printf("%.5s\n","hello world");
	return 0;	//只输出字符串的前5个字符,即“hello”
}

scanf

当我们有变量时,我们给变量输入值可以使用scanf函数
当有变量需要输出在屏幕上时,我们使用printf

注:标准输入一般是指键盘,标准输出一般指屏幕

基本用法
scanf()函数用于读取用户的键盘输入

程序运行到该程序时,会停下来,等待用户从键盘输入。
用户输入后按下回车键后,scanf()会处理用户的输入

基本格式

scanf("%d,&n");
//%d是一个占位符  (%是占位符的标志,d表示整数)
// &n将用户从键盘输入的整数存入变量n (&表示取地址,n表示上文已定义变量)

注意!
格式字符里有多少个占位符 就有多少个变量
变量前必须添加&符号(指针变量除外)
因为scanf传递的不是值 而是地址
即变量n的地址指向用户输入的值

scanf("%d%d%f%f",&y,&i,&j,&x,);

scanf()处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符等。
除此之外,用户使用回车键将程序分成几行,也不影响解读

占位符

常用占位符如下:
• %c :字符
• %d :整数
• %f : float 类型浮点数
• %lf : double 类型浮点数
• %Lf : long double 类型浮点数
• %s :字符串
• %[ ] :在⽅括号中指定⼀组匹配的字符(⽐如 %[0-9] ),遇到不在集合之中的字符,匹配将会停⽌

除了%c以外,都会自动忽略起首的空白字符%c不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格。
若要强制跳过字符前面的空白字符,可以写成scanf(" %c",&ch),即在%c前面加一个空格,表示跳过零个或多个空白字符。

强调!
占位符%s不能简单地等同于字符串

%s规则:从当前第一个非空白字符开始读起,直到遇见空白字符(空格、换行符、制表符等)为止。%s不会包含空白字符,所以无法用来读取多个单词,除非多个%s一起使用。
scanf()遇见%s占位符,会在字符串变量末尾存储一个空字符\0。
scanf()j将字符串读入字符数组时,不会检测字符串是否超过数组的边界,易导致出现程序错误。使用%s占位符时,应该指定读入字符串的最长长度,即%[m]s形式([m]是一个整数,表示读取字符串的最大长度,超过标准的字符将被丢弃)。

赋值忽略符

用户的输入可能出现不符合预定的格式的情况。

#include<stdio.h>
int main()
{
	int year =0;
	int month =0;
	int day = 0;
	scanf("%d-%d-%d",&year,&month,&day);
	printf("%d%d%d\n",year,month,day);
	return 0;
}

若用户输入2024-7-112,就会正确解读年月日。如输入格式不对,scanf()\则会解析数据失败。
忽略赋值符(*)的存在有效的解决的该问题,只要将 *其加再任何占位符的百分号后面,该占位符就不会返回值,解析后将被丢弃。

#include<stdio.h>
int main()
{
   int year =0;
   int month =0;
   int day = 0;
   scanf("%d%*c%d%*c%d", &year, &month, &day);
   printf("%d %d %d\n", year, month, day);
   return 0;
}

如有错误,请指正批评!

  • 27
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值