getchar()和 putchar()
需要头文件<cstdio>,getchar函数返回用户键盘输入的一个字符,使用时不带有任何参数,等同于使用cin 和 cout
getchar不会忽略起首的空白字符,如果读取失败,返回值EOF,EOF的值为-1,所以getchar的返回类型要设为int 不能为char
getchar 和 putchar配合使用
scanf 和 printf 函数 表示 输入 与 输出
printf("hello world\\n"); \\n表示换行
占位符 %d ,%s表示字符串占位符,%c 字符,%Lf 浮点型,%f浮点型 %u无符号整数
printf("%5d\\n",123); 至少打印5位,不够的用空格凑,凑够5位,打印结果位右对齐,如果想要左对齐写法为 printf("%-5d\\n",123);
printf("%5d\\n",123456); 打印结果为123456,%5d表示最少打印5位
printf("%f\\n",123.16); %f默认小数点后边有6位数,不够6位时用0来凑
printf("%.2f\\n",123.45); 表示小数点后边保留2位
printf("%6.2f\\n",0.5); 表示小数点后边有2位,总位数为6位
printf("%6f\\n",12.3); 表示总宽度为6位
printf("%*.*f\\n",6,2,12.3);也可以将6.2用*代替
scanf 函数的占位符后一般不会加\\n
scanf函数中指定的格式和给程序员输入的数据格式要严格匹配,否则可能不能得到想要的值
setw 设置字段宽度(只对紧挨着的输出项有效)
satfill 设置填充字符
例如
需要包含头文件 #include <iomanip>
int main() { int a = 123; cout << a << endl; cout << setw(5) << a << endl;
cout << setw(5) << setfill('*') << a << endl;
setfill 表示不够的字符用*填充 return 0; }
fixed 以固定小数点表示浮点数,设置后就不会以科学计数法展示了
scientific 以科学计数法表示浮点数
setprecision 设置浮点数的精度,以控制小数点后的数字位数,一般先固定小数点,再设置精度
double pi = 3.1415926589793; cout << pi << endl; cout << fixed << pi << endl; cout << scientific << pi << endl; cout << setprecision(2) << pi << endl; cout << fixed << setprecision(2) << pi << endl;
dec 以10进制格式显示整数
hex 以16进制格式显示整数
oct 以8进制格式显示整数
int a = 15; cout << a << endl; cout << dec << a << endl; cout << hec << a << endl; cout << oct << a << endl;
cout << setw(10) << left << a << endl; left 左对齐
s = abcbef s表示一组数,所以用.的前面写s s.substr(起始位置,长度)
isalpha 函数表示 字母 (大小写)
string s; //创建一个字符串 getline(cin, s) //从cin输入这里读取,读取的放入s中 s.pop_back(); //尾部删除一个字符
int a,b; while(cin >> a >> b, a || b) 这是逗号表达式:逗号隔开的一串表达式 { cout << a + b << endl; }
逗号表达式的特点是:从左向右以此计算,整个函数表达式的结果,是最后一个表达式的结果
//逐个读取 ,计算其中数字字符的个数 string s; int cnt; while(cin >> s) //读取一个单词,遇到空格就停止 { for(char e:s) { if(isdigit(e)) cnt++; } } cout << cnt << endl;
//整个字符串读取,计算其中数字字符的个数 string s; int cnt = 0; getline(cin,s); //读取字符,遇到空格不会停止 for(char e:s) { if(isdigit(e)) cnt++; } cout << cnt << endl;
cout 默认不输出6位小数,自动忽略小数点后多余的0,printf 函数打印浮点数的时候,小数点默认打印6位;cout在输出的时候不需要指定格式,printf则需要指定格式。在效率方面cin和cout通常比scanf和printf要快
提高cin与cout效率的方法
ios::sync_with_stdio(false); 括号中写false可以取消了给c语言的输入输出缓冲区的数据同步
在默认情况下cin与cout之间存在一种绑定关系,这种绑定关系意味着,每当从cin读取数据时,任何之前通过cout输出的内容都会被强制刷新到屏幕上。cin.tie(0); 取消cin和cout的绑定
在使用scanf/printf 和 cin/cout 抉择的时候,如果要追求 性能 就使用scanf/printf,或者优化版本的cin/cout,如果不追求性能直接用cin和cout
如果输入的数据量比较小在10的6次方以内,用cin 和 cout 或printf 和scanf 都行。但是输入数据量比较大在10的9次方的时候,推荐使用scanf和printf,避免因为输入输出的开销导致代码超时。
网硕互联帮助中心




评论前必须登录!
注册