
prinf 与 scanf/getline - C语言笔记
...大约 4 分钟
本文主要介绍 C 语言标准库<stdio.h>中的格式化输出函数 printf() 和 格式化输入函数 scanf() 的基本用法。
一、printf()
语法:
int printf(const char *format, ...)
format 参数是一个格式字符串,它指定了输出内容的格式。在其中用 % 符号来表示格式化字符,用%%输出一个 % 符号自身。
printf 的格式化字符
语法:%[flags][width][.precision][length]specifier
specifier | 描述 |
|---|---|
%d | 十进制带符号整数(只有负数有符号) |
%u | 十进制无符号整数 |
%x | 十六进制无符号整数(小写字母 a-f) |
%X | 十六进制无符号整数(大写字母 A-F) |
%o | 八进制无符号整数(前缀 0) |
%f | 浮点数(小数点后带有精度) |
%e | 指数记数法的浮点数(小数点后带有精度) |
%E | 指数记数法的浮点数(大写 E) |
%g | 自动选择 e 或 f 格式(较短的) |
%G | 自动选择 E 或 f 格式(较短的) |
%s | 字符串(以空字符结束) |
%c | 单个字符 |
%p | 指针地址 |
flags | 描述 |
|---|---|
- | 给定宽度内左对齐(默认右对齐) |
+ | 强制显示正负号 |
| 空格 | 空格填充 |
# | (o)显示八进制前缀0、(x, X)十六进制前缀0x, 0X |
0 | 给定宽度内不足的位数用 0 填充 |
width: 输出的最小宽度(包括符号),小于时默认填充空格,大于时不截断。precision: 对于整数,表示进制转换后的位数(仅指整数位数);
对于浮点数,表示小数点后的最大长度,不足用0补齐;
对于字符串,表示字符串的最大长度,超过时截断。(不能与width同时使用)
length | 描述 |
|---|---|
h | 被解释为短整型(对于整数) |
l | 被解释为长整型(对于整数或宽字符c,宽字符串s) |
L | 被解释为长双精度型(对于浮点数) |
printf 示例
%+d: 输出带符号整数,正数前加+号,负数前加-号。%05d: 输出带符号整数,不足 5 位的位数用0填充。%5d: 输出带符号整数,不足 5 位的位数用空格填充。%lf: 输出双精度浮点数(double)。%Lf: 输出长双精度浮点数(long double)。
二、scanf()
语法:
int scanf(const char *format, ...)
format 参数是一个格式字符串,它指定了输入内容的格式。在其中用 % 符号来表示格式化字符,用%%读取一个 % 符号自身。
scanf 的格式化字符
语法:%[*][width][modifiers]
modifiers | 描述 | 参数类型 |
|---|---|---|
%d | 十进制整数 | int* |
%u | 十进制无符号整数 | unsigned int* |
%x, %X | 十六进制整数 | int* |
%o | 八进制无符号整数 | int* |
%i | 十/八/十六进制整数(取决于输入的前缀) | int* |
%f, %e, %E, %g, %G | 单精度浮点数 | float* |
%lf | 双精度浮点数 | double* |
%Lf | 长双精度浮点数 | long double* |
%s | 字符串(以空字符结束) | char* |
%c | 读取下一个字符(指定宽度可读取多个字符) | char* |
%p | 指针地址 |
注意
对于printf()方法,可以用%f输出单精度或双精度浮点数;
但对于scanf()方法%f只能读取单精度浮点数,读取双精度浮点数需要用%lf。
scanf 示例
%d%d%d: 读取三个整数,并分别赋值给int型变量。示例输入:1 2 3。%d, %d, %d: 读取三个整数,并分别赋值给int型变量。示例输入:1, 2, 3。%s%d: 读取字符串和整数,并分别赋值给char*和int型变量。示例输入:hello 123。
三、getline()
cin.getline(str, n)
char str[100];
cin.getline(str, 100);
cin.getline() 函数用于从输入流中读取一行字符,并将其存储到指定的字符数组中。该函数的参数包括:
str:要存储输入字符的字符数组。n:要读取的最大字符数(包括空字符)。
getline(cin, str)
string str;
getline(cin, str);
getline() 函数用于从输入流中读取一行字符,并将其存储到指定的字符串中。该函数的参数包括:
cin:输入流对象(通常是cin)。str:要存储输入字符的字符串对象。
区别
cin.getline(str, n) | getline(cin, str) |
|---|---|
str 为 char* 类型 (C 风格字符串) | str 为 string 类型 (C++风格字符串) |
需要指定字符数组的最大长度 n | 不需要指定字符串的长度 |
Powered by Waline v3.6.0
