输入和输出

(1) 使用标准输入/输出

头文件:<cstdio>

变量约定:FILE *fin, *fout;——fin、fout分别代表输入文件和输出文件。把它们换成stdin和stdout,就是从屏幕输入和从屏幕输出。“1.5 字符串操作”也使用了同样的变量。

  1. 输出字符串或变量的值: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补全。

  1. 输入到变量

Ÿ           读取不含空白的内容: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>

  1. 输入到变量:cin>>n;
  2. 输出到屏幕上:cout<<a;
    可以连续输入、输出,如cin>>n>>m;   cout<<a<<','<<b<<endl;
  3. 换行:cout<<endl;
  4. 格式化输出
    头文件:<iomanip>

Ÿ           右对齐,长度为n,不足的部分用空格补齐
cout.width(n);
cout.fill(' ');             // 如果想用“0”补齐,就可以把空格换成“0”
cout<<a;
前两行代码,每次输出之前都要调用。

Ÿ           输出成其他进位制数
8:  cout<<oct<<a;
16: cout<<hex<<a;
其他进位制需要自己转换。

  1. 注意,数据规模很大时,流的输入输出速度会变得很慢,甚至数据还没读完就已经超时了。
    在进行输入输出之前加入这样一条语句:ios::sync_with_stdio(false);
    调用之后,用cin、cout输入输出的速度就和scanf、printf的速度一样了。


[1] 在Windows下调试时,用“%I64d”输出long long类型的值。交卷时,由于用Linux测试,要改成“%lld