如何使用scanf和printf~
1.printf
1.1基本用法
1.2占位符
1.3占位符举例
1.4输出格式
2.scanf
2.1基本用法
2.2scanf的返回值
2.3占位符
2.4赋值忽略符
1.printf
1.1基本用法
printf()
的作用是将参数文本输出到屏幕,f
代表format
(格式化),表示可以定制输出文本的格式。printf
不会自动换行,因此运行结束后,光标就停留在输出结束的地方。
int main()
{
printf("hello world");
return 0;
为了让光标移到下一行可以在输出语句末尾添加一个\n
,表示换行:
int main()
{
printf("hello world\n");
return 0;
printf()
是在标准库的头文件中<stdio.h>
定义的,所以使用时要加<stdio.h>
头文件。
1.2占位符
所谓占位符,就是在这个占位符位置可用其他值代入,printf()
可以在输出文本中指定占位符。
int main()
{
int a = 3;
printf("%d",a);
return 0;}
上面代码中的%d
就是一个占位符,%d
的位置可以用a
代替,所以上面语句输出的结果是3。
占位符的第一个字符一律为百分号%
,第二个字符表示占位符的类型,%d
表示这里代入的值必须是一个整数。
printf("%d",a);
这里的%d是printf
的第一个参数,a
是第二个参数,第二个参数就用来替换占位符的值。
除了%d
,%s
也是占位符,用来代替字符串。
int main()
{
ptintf("%s will come tonight",zhangsan);
return 0;
}
这里的zhangsan
替换了占位符%s
.一行语句中也可以有多个占位符。
1.3占位符举例
printf()
的占位符有很多种,与C语言的数据类型相对应。以下是一些常用的占位符
%a
:十六进制浮点数,字母输出为小写 。%A
: 十六进制浮点数,字母输出为大写 。%c
: 字符。%d
: 十进制整数。%ld
:十进制long int
类型%f
: 小数(包含float
类型和double
类型)。%lf
:long double
浮点类型。%o
: 八进制整数。%p
:指针%s
:字符串%zd
:size_t
类型
1.4输出格式
printf()
允许限定占位符的最小宽度
int main()
{
printf("%5d",123);//输出“ 123”
return 0;
%5d
限定了输出的最小宽度是五位,若果不满五位,就会补空格,默认为右对齐因此会在123前面自动补上两个空格。如果想改为左对齐,则写成%-5d
,
int main()
{
printf("%-5d",123);//输出“123 ”
return 0;
小数用%f
打印,也可限定显示宽度:
int main()
{
printf("%12f",12.34);//会打印出“ 12.340000”
return 0;
}
%12f
表示输出的浮点数至少要占12位,由于小数点后默认精度是6位,所以输出的结果会在开头添加三个空格。
在%d
的中间加上正号(+),可以显示数字的正负号:
int main()
{
printf("%+d", 12);//显示+12
printf("%+d",-12);//显示-12
return 0;
}
还可以限定小数位数:
int main()
{
printf("%6.2f",12.34);//会打印出“ 12.34”
return 0;
}
输出的数前面只加一个空格,小数点也算一位,.2f
限定了小数点后面只有两位。
2.scanf
2.1基本用法
scanf()
函数用于读取用户的键盘输入,当我们定义了一个变量,我们需要给变量输入一个值时,就可以用scanf
。
int main()
{
int a = 0;
scanf("%d",&a);
printf("%d",a);
return 0;
}
程序运行到scanf()
语句时,会停下来等待用户从键盘输入,然后将用户输入的值存入变量a
的地址中,&a
意思是取了a
这个变量的地址,将输入的值存进去,&
是取地址符。
scanf()
处理数值占位符时,会自动过滤空白字符,包括空格,制表符,换行符等。
scanf()
的返回值是一个整数,表示成功读取的变量个数。如果没有读取到任何项,或者匹配失败,则返回0
,如果在成功读取任何数据之前,发生了读取错误或者遇到读取到文件末尾,则返回常量EOF
(-1)。
int main()
{
int a = 0;
int b = 0;
float f = 0.0f;
int r = scanf("%d %d %f",&a,&b,&f);//r是一个变量,用来接收scanf成功读取的变量个数
printf("a = %d b = %d c = %f\n",a,b,f);
printf("r = %d\n",r);
return 0;
}
结果:
2.3占位符
scanf()
常用的占位符,与printf()
的占位符基本一致
%c
:字符。%d
:整数。%f
:float
类型浮点数。%lf
:double
类型浮点数。%Lf
:long double
类型浮点数。%s
:字符串。%[ ]
:在方括号中指定一组匹配的字符(比如%[ 0-9]
),遇到不在集合之中的字符,匹配将停止。
2.4赋值忽略符
int main()
{
int year = 0;
int month = 0;
int day = 0;
scanf("%d-%d-%d",&year,&month,&day);
printf("%d %d %d",year,month,day);
return 0;
}
上面代码中,如果用户输入2024-6-22
,就会正确解读出年、月、日,但如果用户以其他形式输入,例如
2024/6/22
,scanf解析数据就会失败。
为了避免这种情况,scanf()
提供了一个赋值忽略符*
,只要把*加在任何占位符的百分号后面,该占位符就不会返回值,解析后将被丢弃。
int main()
{
int year = 0;
int month = 0;
int day = 0;
scanf("%d%*c%d%*c%d",&year,&month,&day);
printf("%d %d %d",year,month,day);
return 0;
%*c
就是占位符的百分号后面,加入了赋值忽略符,表示这个占位符没有对应的变量,解读后不必返回。
如有错误和不足请大家指正~