(1) 使用标准输入/输出
头文件:<cstdio>
变量约定:FILE *fin, *fout;——fin、fout分别代表输入文件和输出文件。把它们换成stdin和stdout,就是从屏幕输入和从屏幕输出。“1.5 字符串操作”也使用了同样的变量。
- 输出字符串或变量的值:printf("格式字符串", ……);
或fprintf(fout, "格式字符串", ……);
格式字符:“%”后连接一个字母。
字符 |
含义 |
字符 |
含义 |
d |
整数[1] |
e, E |
用科学记数法表示的浮点数 |
u |
无符号整数 |
f |
浮点数 |
o |
八进制整数 |
c |
字符 |
x, X |
十六进制整数(小写、大写) |
s |
字符串(字符数组) |
常见的修饰符:
%5d:5位数,右对齐。不足5位用空格补齐,超过5位按实际位数输出。
%-5d:5位数,左对齐。不足5位用空格补齐,超过5位按实际位数输出。
%05d:5位数,右对齐。不足5位用'0'补齐,超过5位按实际位数输出。
%+d:无论是正数还是负数,都要把符号输出。
%.2f:保留2位小数。如果小数部分超过2位就四舍五入,否则用0补全。
- 输入到变量
读取不含空白的内容:scanf("格式字符串", &……);
或fscanf(fin, "格式字符串", &……);
① 格式字符和printf基本一致。
② 不要忘记“&”!printf传的是值,scanf传的是地址!
③ scanf和fscanf的返回值是:成功输入的变量个数。fscanf返回EOF,表示文件结束。
④ scanf和fscanf忽略TAB、空格、回车。遇到这些字符它们就停止读取。
读取单个字符:fgetc(fin);
首先要判断它是否为EOF(文件结束)。如果不是,就可以用强制类型转换变成char。
读取到行末时,要注意对换行符的处理。
Windows、Linux、Mac的回车字符是不同的。Linux是' ',Mac是' ',Windows下是两个字符——' '和' '。
(2) 使用流输入/输出
头文件:<iostream>
- 输入到变量:cin>>n;
- 输出到屏幕上:cout<<a;
可以连续输入、输出,如cin>>n>>m; cout<<a<<','<<b<<endl; - 换行:cout<<endl;
- 格式化输出:
头文件:<iomanip>
右对齐,长度为n,不足的部分用空格补齐:
cout.width(n);
cout.fill(' '); // 如果想用“0”补齐,就可以把空格换成“0”
cout<<a;
前两行代码,每次输出之前都要调用。
输出成其他进位制数:
8: cout<<oct<<a;
16:
cout<<hex<<a;
其他进位制需要自己转换。
- 注意,数据规模很大时,流的输入输出速度会变得很慢,甚至数据还没读完就已经超时了。
在进行输入输出之前加入这样一条语句:ios::sync_with_stdio(false);
调用之后,用cin、cout输入输出的速度就和scanf、printf的速度一样了。