1.printf
1.1基本用法
printf函数的作用是将参数文本输出到屏幕上,表示可以定制输出文本的格式。
它是由标准库中的头文件 stdio.h 来定义的,所以使用这个函数数要引入这个头文件。
#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;
1.2占位符
若要printf()中所打印的数据可以变化,即打印变量,就可以使用占位符(也被称为格式控制字符)来进行占位。
占位符以%开头,后面的字符表示占位符的类型。
常见的占位符:
%d:表示这里代入的值必须是一个整数(short,int)
%ld: 表示 long int类型
%lld:表示 long long int 类型
%f:表示这里代入的值必须是一个小数(float,double),
%lf:表示 double 类型
%c :表示这里代入的值必须是一个字符(char),
使用printf()基本语法形式为:
printf(“格式控制字符串”,输出项列表)
#include<stdio.h>
int main()
{
int a = 10;
printf("%d\n",a);
return 0;
#include<stdio.h>
int main()
{
float b = 3.14;
printf("%f\n",b);
return 0;
#include<stdio.h>
int main()
{
char c = 'A'
printf("%c\n");
return 0;
#include<stdio.h>
int main()
{
printf("%s\n","hello world");
return 0;
在输出文本中可以使用多个占位符。
1.3限定宽度
printf()允许限定占位符的最小宽度。输出值默认是右对齐,即当输入的数值不满足所限制的宽度时,对应的值的前面会加空格。
对于整数:
如果想要变为左对齐,这可以在 % 后加上 - 。
对于小数:
这个限制符会限制所有数字的最小显示宽度。
printf("%10f",3.12);
在上述代码中,%10f 表示输出的浮点数最少要占10位,由于小数的默认精确值为小数点后六位,所以输出的结果会在3.12前面加上两个空格。
printf("%5.2f",3.12);
这样就会限制小数点后的占位数,上述即保留小数点后两位,小数点前五位,所以输出的结果会在3.12前面加上四个空格,并只保留小数点后两位。
默认情况下,printf()不会对正数显示 + 号,若希望其显示,可以在占位符的%后加上+。
printf("%+d\n",12);//输出+12
对于字符串:
可以用 %.[m]s 来限制想要输出的字符个数,m即所要输出的字符长度。
printf("%.5s","Hello world");//输出 Hello
2.scanf
scnaf()函数用于读取用户的键盘输入。在程序运行值该函数时,将会停下来等待用户输入,然后再将其存入指定的变量之中。该函数的头文件也是 stdio.h 。
scanf()的语法形式与printf()类似:
scanf(“格式控制字符”,输入列表);
int a=0;
scanf("%d",&a);
所用占位符与printf() 所用基本一致,由于C语言中的数据都具有类型,所以 scanf() 必须提前知道用户输入的数据类型,才能够处理数据。它的其余参数就是存放用户输入的变量,在格式字符串中有多少个占位符,就有多少个变量。
scanf()在处理数值占位符时,会自动过滤空白字符,包括空格,制表符,换行符等,所以用户输入数据之间有一个和多个空格,或一个和多个回车是不影响解读的。
scanf() 处理用户输入的原理是,用户的输入先放入缓存中,等到按下回车键或空格时,按照占位符对缓存进行解读。
在每次按下回车键或空格键后,scanf()就会开始解读,若第一行匹配第一个占位符,那下次按下回车或空格时,就会从第二个占位符开始解读。
解读用户输入时,会从上一次解读遗留的第一个字符开始,直到读完存储,或遇到第一个不符合条件的字符为止。
#include<stdio.h>
int main()
{
int a=0;
char b='a';
double c=0;
scanf("%d%c%lf",&a,&b,&c);
printf("%d %c %f",a,b,c);
return 0;
}
注:1.在变量前面不许加上 & 运算符(指针变量除外),& 为取地址符号,因为scanf() 传递的不是值,是地址, 即将变量 a 的地址指向用户输入的值。
scanf()函数在表示 double类型的数据时,只能用%lf,不能用%f。但printf()函数中可以使用。
在scanf()占位符中,除了 %c 以外,都会自动忽略起首的空白字符,而 %c 总是返回读取到第一个字符,无论该字符是否为空格
scanf的返回值
scanf()函数的返回值是一个整数表示成功读取的变量个数,若没有读取任何选项或匹配失败,则会返回0。
如果在成功读取任何数据之前,发生了读取错误或遇到读取文件结尾,则返回常量EOF(-1,是文件结束标志)。
特别说明一下占位符 %s ,其不能笼统地概括为是字符串的占位符,其规则是,从当前第一个非空白字符(%s 不会包含空白字符)开始读起,直到遇到空白字符(空格,制表符,换行符等)为止,另外,scanf() 遇到占位符 %s 时,会自动在字符串变量末尾存储一个空字符 \0 作为结束标志。
赋值忽略符
在scanf() 中输入的格式是要与预定的格式一致的,但有时用户的输入可能不符合预定的格式。
//输入年月日
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;
上述代码中,若输入 1919-5-4 程序会进行正确的解读,但如果输入 1919 5 4 ,程序就会报错。
所以为了解决这一问题,scanf() 提供了一个赋值忽略符 * ,只要把 * 加在任何占位符百分号的后面,该占位符就不会返回值,解析后会被丢弃。
int year = 0;
int month = 0;
int day = 0;
scanf("%d%*c%d%*c%d",&year,&month,&day);//输入1919/5/4
//其中的 / 字符就不会产生影响了
printf("%d %d %d\n",year,month,day);//输出 1919 5 4
return 0;
以上就是printf函数和scanf函数的简单介绍,若有不足之处,欢迎大家提出。