Hello, World!
42, +42, 42 , +042
3.141593, 3.141593e+00, 3.1416 , +3.1416e+00
There is two 'l's in 'Hello'
《计算机程序设计》
计算机学院计算机研究所编译系统研究室
~/course
~/course/main.cpp
main.cpp
,随堂编程练习的代码请直接在此文件中编辑操纵子 | 相关标志位/方法 | 描述 |
---|---|---|
dec , oct , hex |
dec , oct , hex |
设置数字进制 |
scientific , fixed , hexfloat , defaultfloat |
scientific , fixed |
设置浮点数输出格式 |
left , right , internal |
left , right , internal |
设置输出对齐方式 |
boolalpha , noboolalpha |
boolalpha |
设置布尔数输入输出格式 |
showbase , noshowbase |
showbase |
显示整数的进制前缀 |
showpoint , noshowpoint |
showpoint |
显示浮点数的小数点 |
showpos , nonshowpos |
showpos |
显示正数符号 |
skipws , noskipws |
skipws |
跳过空白字符 |
uppercase , nouppercase |
uppercase |
使用大写字母表示十六进制前缀 |
setw() |
width() |
设置输出宽度 |
setfill() |
fill() |
设置填充字符 |
setprecision() |
precision() |
设置浮点数输出精度 |
学习目标
考试中如果需要使用C风格IO,不要抓瞎
<cstdio>
函数签名 | 描述 |
---|---|
int printf( const char* fmt, ... ); |
输出到标准输出 |
int fprintf( std::FILE* stream, const char* fmt, ... ); |
输出到文件 |
int sprintf( char* buf, const char* fmt, ... ); |
输出到字符串 |
明察秋毫
...
表示printf
函数printf
函数的功能是将数据输出到标准输出,第一个参数是一个格式化字符串,后跟一个可变参数列表
%
标记一个格式指示符的开始格式指示符的构成
%[flags][width][.precision][length-modifier]conversion
%
:格式指示符的开始flags
:标志位,0个或多个width
:最小输出宽度.precision
:精度length-modifier
:长度修饰符,0个或多个conversion
:转换说明符,1个conversion
是必须的,其他要素是可选的格式指示符的构成
%[flags][width][.precision][length-modifier]conversion
转换说明符 | 描述 | 转换说明符 | 描述 |
---|---|---|---|
c |
字符 | s |
字符串 |
p |
指针 | % |
百分号 |
d , i |
有符号十进制整数 | o , u , x , X |
无符号八进制、十进制、十六进制整数 |
f , F |
小数格式十进制浮点数 | e , E |
科学记数法十进制浮点数 |
g , G |
自动格式十进制浮点数 | a , A |
十六进制浮点数 |
长度修饰符 | 描述 | 长度修饰符 | 描述 |
---|---|---|---|
hh |
单字节整数 | h |
short 整数 |
l |
long 整数 |
ll |
long long 整数 |
L |
long double |
格式指示符的构成
%[flags][width][.precision][length-modifier]conversion
setw
流操纵子标志位 | 描述 |
---|---|
- |
左对齐,默认为右对齐 |
+ |
始终显示数的符号,即输出正数时添加正号 |
(一个空格) |
正数前添加空格 |
0 |
用0填充空白,默认为空格 |
格式指示符的构成
%[flags][width][.precision][length-modifier]conversion
f/F
与e/E
转换说明符时,精度表示小数点后数字的个数g/G
转换说明符时,精度表示总有效数字的个数考考你
这和setprecision
流操纵子的作用是否相同?
格式指示符的构成
%[flags][width][.precision][length-modifier]conversion
printf-usage.cpp
#include <cstdio>
static const double PI = 3.14159265358979323846;
int main() {
printf("Hello, World!\n"); // 打印一个字符串,不包含格式指示符
printf("%d, %+4d, %-4d, %+04d\n", 42, 42, 42, 42); // 打印整数
printf("%f, %e, %-10.4f, %+-.4e\n", PI, PI, PI, PI); // 打印浮点数
printf("There is two '%c's in '%s'\n", 'l', "Hello");// 打印字符和字符串
return 0;
}
Hello, World!
42, +42, 42 , +042
3.141593, 3.141593e+00, 3.1416 , +3.1416e+00
There is two 'l's in 'Hello'
提示
只需要记住几个基本的转换说明符即可,考试题目中会有相应说明
fprintf
函数fprintf
函数的功能是将数据输出到文件中
printf
函数,fprintf
函数多了一个参数FILE *f
printf
函数相同向文件中输出
#include <cstdio>
int main() {
FILE *f = fopen("output.txt", "w"); // 第二参数表示打开模式,"r"表示读,"w"表示写,"b"表示二进制模式
if (f == nullptr) {
printf("Error opening file\n");
return 1;
}
int a = 0;
double b = 1.0;
char c = '2';
char *s = "hello world";
fprintf(f, "print an int %d, a double %f, a char %c, and a string %s\n",
a, b, c, d);
fclose(f); // 关闭文件
}
sprintf
函数sprintf
函数的功能是将数据输出到字符串中
printf
函数,sprintf
函数多了一个参数char *str
printf
函数相同sprintf-usage.cpp
print an int 0, a double 1.000000
print an int 0, a double 1.000000
scanf
函数scanf
函数的功能是从标准输入中读取数据
%
标记一个格式指示符的开始明察秋毫
scanf
函数中的格式指示符与printf
函数中的格式指示符用法相同
scanf
函数scanf函数使用示例
考考你
%3c
表示什么?s
为什么不取地址?fscanf
函数fscanf
函数的功能是从文件中读取数据
scanf
函数,fscanf
函数多了一个参数FILE *f
scanf
函数相同sscanf
函数sscanf
函数的功能是从字符串中读取数据
scanf
函数,sscanf
函数多了一个参数const char *str
scanf
函数相同--- config: look: handDrawn themeVariables: fontSize: 24px --- mindmap C风格IO 格式化输出 printf fprintf sprintf 格式指示符 格式化输入 scanf fscanf sscanf
学习目标
计算机程序设计