scanf与printf

1.printf函数

1.1用法

printf()可以将参数文本输出到屏幕。printf是print format的缩写。

#include<stdio.h>
int main()
{
	printf("Hello World");
	return 0;
}

这样就会在屏幕上输出一行文字“Hello World”。

如果需要换行,可以在结尾加一个换行符'\n'。

#include<stdio.h>
int main()
{
	printf("Hello World\n");
	return 0;
}

这样就可以实现换行了!

printf()是在标准库的头文件stdio.h中定义的。在使用之前需要在源文件最上方引入这个头文件。

例如:#include<stdio.h>

1.2占位符

在学习占位符之前,先让我们了解一下占位符都有什么。

//占位符
//%d 整数
//%f 浮点数
//%c 字符
//%s 字符串
//%p 指针
//%x 十六进制整数
//%o 八进制整数	

//占位符的作用
//1. 格式化输出
//2. 格式化输入
//3. 格式化字符串

//格式化输出
//printf("格式化字符串", 变量1, 变量2, 变量3, ……);

//格式化输入
//scanf("格式化字符串", 变量1, 变量2, 变量3, ……);

//格式化字符串
//%d 整数
//%f 浮点数
//%c 字符
//%s 字符串
//%p 指针
//%x 十六进制整数
//%o 八进制整数

//格式化输出示例
#include <stdio.h>

int main()
{
    int a = 10;
    float b = 3.14;
    char c = 'A';
    char d[] = "Hello World";
    printf("a = %d, b = %f, c = %c, d = %s\n", a, b, c, d);
    return 0;
}

//格式化输入示例
#include <stdio.h>

int main()
{
    int a, b;
    float c;
    char d[10];
    scanf("%d %f %c %s", &a, &c, &d);
    printf("a = %d, b = %f, c = %c, d = %s\n", a, c, d[0], d);
    return 0;
}

//格式化字符串示例
#include <stdio.h>

int main()
{
    int a = 10;
    float b = 3.14;
    char c = 'A';
    char d[] = "Hello World";
    printf("a = %d, b = %f, c = %c, d = %s\n", a, b, c, d);
    return 0;
}   

在上面的代码中,%d就是占位符,表示这里的值待定,需要用别的值来替换。通过上面不难看出,占位符的第一个字符一律为%,第二个字符表示字符占位符的类型,%d表示这里代入的值必须是一个整数。

1.3 占位符列举

如下是所有占位符的介绍,具体含义会在后面的作品中一一介绍。

//输出占位符(printf)
//整数类型:
//
//% d:十进制整数。
//% i:同% d,也用于十进制整数。
//% o:八进制整数。
//% x:十六进制整数(小写)。
//% X:十六进制整数(大写)。
//浮点类型:
//
//% f:浮点数(标准格式)。
//% e:科学计数法表示的浮点数(小写 e)。
//% E:科学计数法表示的浮点数(大写 E)。
//% g:根据数值的大小自动选择% f 或% e 格式。
//字符和字符串:
//
//% c:单个字符。
//% s:字符串(以 null 结尾的字符数组)。
//无符号整数:
//
//% u:无符号十进制整数。
//% p:指针的值(地址)。
//其它格式:
//
//%% :输出一个百分号% 。
//% l:用于 long 类型(与其他格式结合使用,比如% ld 对于长整型)。
//% lf:用于 double 类型(在 scanf 中)。
//输入占位符(scanf)
//整数类型:
//
//% d:读取十进制整数。
//% i:读取整数,支持十进制、八进制和十六进制。
//% o:读取八进制整数。
//% x:读取十六进制整数。
//浮点类型:
//
//% f:读取浮点数。
//% lf:读取双精度浮点数。
//% e:读取科学计数法表示的浮点数。
//字符和字符串:
//
//% c:读取一个字符。
//% s:读取以空格为分隔的字符串(直到遇到空格或换行)。
//无符号整数:
//
//% u:读取无符号整数。
//指针:
//
//% p:读取指针类型。

1.4输出格式

printf()可以用来定制占位符的输出格式,具体怎么操作,让我们一起来看看吧。

1.4.1限定宽度

我们可以限定占位符的最小宽度。

上面代码中,%5表示这个占位符宽度至少为5位,如果不满5位则会自动添加空格。默认输出是右对齐,在输出内容的前面添加空格。如果想改成左对齐,并在输出的后面添加空格,可以在占位符的%后面紧接着加上一个负号。如%-5d。

这样就会在后面自动添加空格了。

上面我们讲的是整数,下面我们来看看占位符再小数中发挥什么作用吧!

在表示小数的时候占位符会限定所有数字的最小显示宽度。

如下图所示

因为%12d表示输出的浮点数最少要占据12位。由于小数默认显示精度是小数点后6位,所以123.45输出结果会在结果的头部添加两个空格。

1.4.2 如何显示-号

在默认情况下,printf()不对正数显示+号,只对负数显示-号。如果你也想输出+号,可以在占位符后边添加一个+号。

这样就可以啦!

1.4.3限定小数位数

C语言默认输出小数点后六位,如果我们想保留两位小数时该怎么办呢?

我们可以将占位符写成%.2f的形式。

如下图

看!当我们想保留两位数字的时候将占位符写成%.2f就可以啦!

限定字符串最小宽度,与限定小数位数还可以结合使用。

如下图

这样输出的字符串前边会自动补两个空格,也会保留两位小数。

这里还有一种写法,最小宽度与最小位数,都可以用*号来代替。

如下图

上图中的两个*号的值分别通过后面的两个参数6和2传入。

1.4.4 输出部分字符串

当我们使用%s来输出字符串的时候,默认是全部输出。如果只想输出开头部分,如果只想输出部分内容该怎么做呢?

如下图

上图中,使用了%.5s只输出字符串的前五个字符,即是“hello”。

2.scanf函数

当我们创建了变量之后,就需要对变量输入值,这时候我们就需要使用csanf函数了,如果需要将变量在屏幕上输出,就可以使用printf函数。

如下图

 这里我们先大致看一下,接下来我将会为大家详细讲解。

2.1scanf函数基本用法

scanf()函数用于读取用户的键盘输入。

当程序运行到这个语句时,会停下来,等待用户输入。

当用户输入完之后,按下回车键,scanf函数就会处理用户的输入,将其存入到变量当中。

scanf函数的使用也需要引用头文件stdio.h。

我们的scanf()的第一个参数时%d表示这里需要输入一个整形类型的数字。第二个参数是&a,&是取地址操作符,这里表示将用户输入的值,存入变量a中。

2.2scanf函数的返回值

scanf()的返回值是一个整数,表示成功读取的变量个数。如果scanf()没有读取任何数,或者匹配失败则会返回0。如果在成功读取任何数据之前,发生了读取错误,或者提前结束了读取,则返回常亮EOF(-1)。EOF-end of file文件结束标志。

2.3占位符

scanf()中的占位符,与printf()中的占位符基本一致。

整数类型:

%d:读取有符号十进制整数(int)。
%i:读取整数,可接受十进制、八进制和十六进制。
%o:读取无符号八进制整数。
%x:读取无符号十六进制整数(小写)。
%X:读取无符号十六进制整数(大写)。
浮点数类型:

%f:读取单精度浮点数(float)。
%lf:读取双精度浮点数(double)。
%e:读取科学计数法表示的浮点数(小写 e)。
%E:读取科学计数法表示的浮点数(大写 E)。
字符和字符串:

%c:读取一个字符。
%s:读取字符串(以空格为分隔符,直到遇到空格、换行符或 EOF 为止)。
无符号整数:

%u:读取无符号十进制整数。
指针:

%p:用于读取指针地址。
其他:

%%:用于输出一个百分号 %。

2.4赋值忽略符

#include<stdio.h>
int main()
{
	int a,b,c;
	scanf("%d,%d,%d", &a,&b,&c);
										
	return 0;
}

如果这里用户输入的格式与预定的格式不符,scanf就会解析失败。那如何解决这个问题呢?

这里我们就可以用到赋值忽略符*号。将*加在任何占位符%后面,该占位符将不会返回值。

代码更改如下

#include<stdio.h>
int main()
{
	int a,b,c;
	scanf("%d %*c %d %*c %d", &a,&b,&c);
										
	return 0;
}

这样你在输入的时候就可以用任意符号隔开两个相邻的数字了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值