scanf和printf的介绍和使用

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函数的简单介绍,若有不足之处,欢迎大家提出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值