今天开始肝c++了,啊这可是我几百年没碰过的玩意儿。之前一直在安卓上面搞来搞去,暑假到现在就一直写python。python给我的感觉就是相对于c++,一些代码没有那么又长又臭了,但是感觉那个运行速度有点低。然后开学了,还是得把c++学好才行啊。于是乎我就把
感觉c++的格式化输入输出和python的格式化输入输出很类似,在某些格式符的使用上还有正则表达式那种匹配的感觉,对于学过正则的同学来说,这个应该不难。
C++格式化输入输出用到的是cstdio中的scanf和printf函数,这对于我们从输入的数据中获取我们想要的信息很有帮助。(啊感觉这不就是对输入的信息进行了正则匹配吗?)输出的时候也可以用比较短的代码就能搞定,简直nice到不行。
记得初中信息学老师讲过,scanf和printf相较于cin、cout,在大量数据输出的时候好像比较占优势?(如果我没记错的话)
然后就讲下格式符的使用吧。
scanf函数
*格式符的使用
*格式符用来表示输入的量不赋值给一个变量
#include<cstdio>
int main()
{
int a,b;
scanf("%d%*d%d", &a,&b);
printf("a=%d,b=%d\n", a, b);
}
在上面这个例子中,如果我们输入 1 2 3
那么执行结果将会是
a=1,b=3
域宽格式符的使用
域宽格式符指定了输入列所占的列宽,域宽是一个整数。
#include<cstdio>
int main()
{
int a, b;
scanf("%4d%4d", &a, &b);
printf("a=%d,b=%d\n", a, b);
}
当我们输入123456789时,就会有如下的输出:
a=1234,b=5678
%s格式符的使用
%s是匹配字符串的意思
#include<cstdio>
int main()
{
char st[40];
scanf("%s", st);
printf("Your input is:%s\n", st);
}
当我们输入abc hello时,程序将会输出
Your input is:abc
我们发现,它并没有匹配hello,那么scanf的%s匹配应该是到空格就停止了。
非格式符的使用
其实我觉得格式化输入就是一个类似于正则匹配的东西,所以非格式符很自然就是作为一个简单的匹配条件罢了。
#include<cstdio>
int main()
{
int a,b,c;
scanf("%d,%d,%d",&a, &b, &c);
printf("a=%d,b=%d,c=%d", a, b, c);
}//本例子中,应该以非格式字符','作为间隔符
在这个例子之中,我们应该输入5,6,7
然后执行结果应该是
a=5,b=6,c=7
printf函数
这里就着重讲讲d、f、s格式符
d格式符的用法,举个例子看的很清楚。
%ld(小写字母l)用来输出长整型数据。
#include<cstdio>
int main()
{
int i = 1;
long j = 123;
printf("%d,%2d,%03d,%ld,%-4ld,%05ld",i,i,i,j,j,j);
}
执行结果
1, 1,001,123,123 ,00123
参数 | 说明 |
%f | 按实数格式输出,整数部分按实际位数输出,6位小数 |
%m.nf | 总位数m(含小数点),其中有n位小数 |
%-m.nf | 同上,左对齐 |
参数 | 说明 |
%s | 按实际宽度输出一个字符串 |
%ms | m指定宽度(不足时补空格,大于时按实际宽度输出) |
%-ms | 左对齐,不足时右补空格 |
%m.ns | 输出占m个字符位置,其中字符数最多n个,左补空格 |
%-m.ns | 同上,右补空格 |