输出函数printf()
定义
1、用printf()函数作用将所要输出的内容打印到屏幕当中,printf是由print format两个单词组成,表示定制输出⽂本的格式。
#include <stdio.h>
int main(){
printf("hello world");
return 0;
}
该代码会在屏幕上输出hello world
printf() 函数不会在⾏尾⾃动添加换⾏符,运⾏结束后,光标就停留在输出结束的地⽅,不会⾃动换
⾏。
为了让光标移到下⼀⾏的开头,可以在输出⽂本的结尾,添加⼀个换⾏符\n.
#include <stdio.h>
int main(){
printf("hello world\n");
return 0;
}
如果文本内部要求换行,可以用换行符来实现。
#include<stdio.h>
int main(){
printf("hello\nworld");
return 0;
}
2、注意:
用printf()函数需要在文件头部加上库文件stdio.h
puts()函数
puts()函数可以顺利输出作为实参的字符串,并在结尾中换行。puts(“…”)与printf(“…\n”)功能基本相同。
当需要换行且不需要格式化输出时,可以用puts()函数代替printf()函数。
示例:
#include <stdio.h>
int main() {
int num = 0;
puts("请输入一个整数。");
printf("num:");
scanf("%d",&num);
}
占位符
1、说明:所谓占位符就是这个位置可以被其他值代替;输出函数printf()和输入函数scanf()都需要用到占位符。
2、看代码
#include <stdio.h>
int main(){
printf("My lucky numbers are %d ",9);
return 0;
}
上述代码"My lucky numbers are %d"就是要输出的内容,而%d要被9代替,输出结果为"My lucky numbers are 9。
3、语法格式:第一个字符为百分号% ,第二个字符表示为占位符的类型。如%d表示整型数字,%c为字母等。
4、输出文本可以有多个占位符
#include<stdio.h>
int main(){
printf("%s have %d apples\n","xiaoming",3);
return 0;
}
该代码中有两个占位符,第一个占位符为%s表示字符串,第二个占位符为%d表示整数,分别对应第二个参数为"xiaoming"和第三个参数为3,输出结果为xiaoming have 3 apples。
4、 printf() 参数与占位符是⼀⼀对应关系,如果有n个占位符,那么就有n+1个参数。如果参数个数少于对应的占位符,占位符就会被内存中的某个值代替。
其他占位符
• %a:⼗六进制浮点数,字⺟输出为⼩写。
• %A:⼗六进制浮点数,字⺟输出为⼤写。
• %c:字符。
• %d:⼗进制整数。
• %e:使⽤科学计数法的浮点数,指数部分的e为⼩写。
• %E:使⽤科学计数法的浮点数,指数部分的E为⼤写。
• %i :整数,基本等同于%d。
• %f:⼩数(包含float类型和double类型)。
• %g:6个有效数字的浮点数。整数部分⼀旦超过6位,就会⾃动转为科学计数法,指数部分的e为⼩写。
• %G:等同于%g,唯⼀的区别是指数部分的E为⼤写。
• %hd :⼗进制shortint类型。
• %ho:⼋进制shortint类型。
• %hx :⼗六进制shortint类型。
• %hu:unsignedshortint类型。
• %ld:⼗进制longint类型。
• %lo:⼋进制longint类型。
• %lx:⼗六进制longint类型。
• %lu:unsignedlongint类型。
• %lld:⼗进制longlongint类型。
• %llo:⼋进制longlongint类型。
• %llx:⼗六进制longlongint类型。
• %llu:unsignedlonglongint类型。
• %Le:科学计数法表⽰的longdouble类型浮点数。
• %Lf:longdouble类型浮点数。
• %o:⼋进制整数。
• %p:指针。
• %s:字符串。
• %u:⽆符号整数(unsignedint)。
• %x:⼗六进制整数。
• %zd:size_t 类型。
• %%:输出⼀个百分号。
输出格式
printf()函数可以定制占位符的输出格式。
限定宽度
printf() 允许限定占位符的最小宽度。
#include <stdio.h>
int main(){
printf("%5d",123);
}
上述中,%5d表示最小宽度为5位,不足时在前面补上空格。对齐方式默认为右对齐,及输出内容前面会有空格。上述代码结果为 123,123前面有两个空格。
对于小数,这个限定符会限制所有数字的最小显示宽度。
#include<stdio.h>
int main(){
printf("%12f",0.123);
}
上述中,%12f表示最小宽度为12位。由于小数点后面默认要有6位,所以0.123输出的结果头部需要添加4个空格。
限定小数位数
输出小数时,有时需要限制小数的位数,举例说明,若要限制小数点后只有三位,占位符写上%.3f。
//输出0.210
#include <stdio.h>
int main(){
printf("%.3f",0.21);
}
上⾯⽰例中,如果希望⼩数点后⾯输出4位(0.2100),只要将占位符写成%.4f即可。
这种写法可以与限定宽度占位符,结合使用
#include <stdio.h>
int main(){
printf("%5.2f",2.13);
return 0;
}
上面示例中,%5.2f 表示输出字符串最小宽度为5,小数位数为2。所以,输出字符串的头部空格添加一个。
最小宽度和小数位数这两个限定值,都可以用*代替,通过printf()参数传入。
#include <stdio.h>
int main(){
printf("%*.*f",5,2,2.13);
}
//相当于%5.2f
上述示例中,%*.*两个星号被printf()两个参数5和2传入。
输入函数scanf()函数
当我们有了变量时,我们需要从键盘上输入值给变量,这个时候可以使用scanf()函数。
#include <stdio.h>
int main(){
int i = 0;
printf("请输入整数:");
scanf("%d",&i);
printf("整数为:%d",i);
}
运行截图:
基本用法
scanf()函数用于读取用户的键盘输入,当程序用到该语句时,会停下来,等待用户的输入,然后将其保存到相应的变量中。
该函数与printf()语法类似,当用到该函数时,需要在源文件头部添加头文件stdio.h.
scanf("%d",&a);
上述中,%d占位符,用法与printf()函数相同,&为取地址符,&i表示当从键盘中输入值时,会将该值放入到i这个变量中。
注意:
变量前面必须加上&(除了指针变量和数组除外),scanf()传入的不是值,而是地址,将变量i的地址指向从键盘中输入的值。
可以从键盘中输入多个变量
scanf("%d %d %c %f",&a,&b,&c,&d);
上述中“%d %d %c %f”前面两个表示整数,第三个表示字符,最后一个表示小数。如1,2,a,2.13依次放入a,b,c,d四个变量当中。
scanf()函数处理数值占位符时,会⾃动过滤空⽩字符,包括空格、制表符、换行符等。
scanf()处理用户输入的原理是,用户的输⼊先放⼊缓存,等到按下回⻋键后,按照占位符对缓存进⾏解读。
解读用户输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条件的字符为止。
#include <stdio.h>
int main()
{
int x;
float y;
// ⽤⼾输⼊" -13.45e12# 0"
scanf("%d", &x);
scanf("%f", &y);
return 0;
}
上述中,scanf()读取用户输入时,会自动忽略起首的空格。%d从负号开始,取到-13结束,因此%d读取的数据为-13。
第二次调用scanf()时,,就会从上⼀次停止解读的地方,继续往下读取。这⼀次读取会从小数点.开始,取到0.45e12结束。
scanf()的返回值
scanf()的返回值为整数,表示成功读取的变量的个数。
如果没有读取任何项,或者匹配失败,则返回0。如果在成功读取任何数据之前,发⽣了读取错误或者遇到读取到文件结尾,则返回常量EOF。
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
float f = 0.0f;
int r = scanf("%d %d %f", &a, &b, &f);
printf("a=%d b=%d f=%f\n", a, b, f);
printf("r = %d\n", r);
return 0;
}
输出结果:
如果输⼊2个数后,按ctrl+z ,提前结束输入:
在vs环境中,按三次ctrl+z会结束输入,此时r为2,表示正确读取两个数值。
如果⼀个数字都不输入,直接按3次ctrl+z ,输出的r是-1,也就是EOF。
占位符
常用占位符:
%d:整数
%c:字符
%s:字符串
%f:float类型的浮点数
%lf:double类型的浮点数
%Lf:long double类型的浮点数
上述占位符中,除了%c外,都可以忽略起首的空格,%c不忽略空白字符,总是返回当前第一个字符。
占位符%s,它的规则是,从当前第⼀个非空白字符开始读起,直到遇到空白字符(即空格、换行符、制表符等)为止。