目录
1.getchar和putchar
- getchar、putchar都是一个一个字符来读取和输出的
- getchar、putchar都可以读取和输出空白字符(空格、换行......)
- 不输入任何字符,putchar返回的是-1;getchar操作失败时,返回EOF
- 两个都在cstdio头文件中
2.printf
- printf时,打印的字符串中有几个换行符就换行几次
- printf的参数与占位符应该是一一对应的关系
- %lld --- long long int (8byte);%lf --- long double(8byte);%% --- 输出一个百分号; %u --- unsigned int
- printf格式化输出时,%5d 即以为无论整型数据占几位,都会用空格填充为5位,如果超过5位就按正常的位数来打印。默认是右对齐,即左边填空格,如果要左对齐那么修改为%-5d即可
- %f打印时,默认保留小数点后6位,如果只希望保留小数点后3位,则%.3f;那么%6.2f就意为宽度限制为6,小数点后只保留2位;如果要通过输入来决定保留几位,可以通过下面的语句,把6和2换成输入的变量即可
cpp
printf("%*.*f\n",6,2,0.5);
3.scanf
- scanf时,"%d,%d"说明输入时需要输入2个整型数据与1个逗号,"%d %d"说明当中还需要加个空格
- e3 意为10^3,-4e3 意为 -4*10^3,.45e12 表示 0.45*10^12
- 不同于getchar,scanf除了%c的占位符以外,都会自动过滤空白字符**(%s也会,并且以空白字符作为结束标志),**如果以%c作为占位符时要忽略空格,那么就以" &c"格式作为占位符
- 原理:用户的输入先放入缓存,等到按下回车键后,按占位符对缓存进行解读,会从上次遗留的第一个字符开始,直到读完缓存或遇到第一个不符合占位符要求的字符为止
- printf和scanf都在cstdio头文件中
- scanf返回值为一个整数,表示成功读取的变量个数,一个变量都没有成功读取发生错误则返回EOF(-1),如果只是占位符与输入数据格式不匹配那么返回0。竞赛时可以通过下面语句来判断循环停止的时机。
cpp
while(scanf("%d%d",&a,&b)==2)
4.cin和cout
- cin是从键盘上输入的字符流,使用cin来进行数据的提取
- cout是以字符流的形式打印的
- cin读取过程中遇到空格时,自动会跳过,遇到换行符就表示此处读取结束
- getline(cin,string str) 函数进行字符串的读取,以换行符作为字符串的结束标志(不包含换行符),然后将读取到的数据存入到str当中。注:这种情况下getline能读取除空格以外的空白字符
- getline(cin,string str,char delim) 读取时,将delim这个字符作为字符串的结束标志,所以结束标志可以自定义
- cin>>a当a读到了匹配的类型数据,那么这个表达式会返回一个true作为结果,读取失败返回false;getline也一样,成功读取时返回true,读取失败时返回false,例如达到文件末尾(EOF),或者只要有一个输入和需要的类型不匹配时,都视为读取失败
cpp
#include<iostream>
using namespace std;
int main()
{
int n,m;
int i=0;
while(cin>>n>>m)i++;
cout<<i;
return 0;
}
无论输入ctrl+c,1和a还是a和b还是单独一个a,输出皆为0
文件输入流的结束可以想象成输入完所有数据以后输入了一个ctrl+v,代表文件输入已经结束;体现在竞赛方面,即为输入结束(因为竞赛的输入都是一个个的输入文件,输入文件中的输入数据结束了,即为文件输入结束EOF)