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;
}
这样你在输入的时候就可以用任意符号隔开两个相邻的数字了。