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;
}
如有错误,请指正批评!