本文是笔者过在线评测时使用的输入输出操作总结。
正常输入输出
C语言中的 scanf, printf通常比较快。
scanf
printf
scanf("%d %d", &a, &b);
printf(“I am %d %s \n”, a, str);
字符串读入
(分割符:enter,space,tab)
- cin:去掉前面的分割符;遇到分割符停止;保留后面的分割符
- cin.get():读取一个任意字符(可以用来清分割符)
- cin.get(str):无法去掉前面的enter符;遇到enter符停止;保留后面的enter符
- 一般用cin.get(str)和cin.get()配合,确定分隔符都被清除掉了。
- cin.get只能用于读取char数组,不能用来读取string,转换类型也不行。如果读取string,可以把缓冲区的字符按理想状态读掉,但是没法通过cout string显示
- cin.getline():一切和cin.get()相同,但是丢弃后面的enter符。刚才对cin.get()说的所有东西都对cin.getline()适用。
- getline可以用来读取string:getline(cin, str)
- 不建议挑战cin.get和cin.getline参数中的长度限制,如果要卡长度请用数次cin.get(ch)
- 其他操作均不推荐使用
解决方法(之一)
如果是这样的输入类型:
3
alice 1
bob 2
cindy 3
可以
cin >> num;
for(int i=0; i<num; i++){
cin >> str[i] >> attr[i];
cin.get();
整数格式化输出
printf("%06d", intNum):用0补齐6位
float/double格式化输出
1.printf("%3.0f",floatNum):不保留小数
说明:%3.0f表明待打印的浮点数(floatNum)至少占3个字符宽,且不带小数点和小数部分,整数部分至少占3个位宽;
注意:这里的3只代表整数部分至少占3位,舍弃小数点和小数点后面的部分
2.printf("%6.2f", floatNum):保留两位小数
说明:%6.2f 表明待打印的数(floatNum)至少占6个字符宽度(包括两位小数和一个小数点),且小数点后面有2位小数,小数点占一位,所以整数部分至少占3位。
参考
cin、cin.get()、getline()详解
C语言printf(""),浮点数打印保留有效位数,小数部分的四舍五入