竹下的魂 @ 2020-08-07 16:39:04
#include<iostream>
#include<algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
int main(){
char s[100],first,ans[100],w;
int n,a,b,c;
cin>>n;
while(n--){
fgets(s,sizeof(s),stdin);
if(s[0]>='a'&&s[0]<='z')
first = s[0],s[0] = ' ';
sscanf(s," %d%d",&a,&b);
switch(first){
case('a'):c=a+b;sprintf(ans,"%d+%d=%d",a,b,c);break;
case('b'):c=a-b;sprintf(ans,"%d-%d=%d",a,b,c);break;
case('c'):c=a*b;sprintf(ans,"%d*%d=%d",a,b,c);break;
}
printf("%s\n%d\n",ans,int(strlen(ans)));
}
return 0;
}
by yummy @ 2020-08-07 16:56:37
@konjacp sscanf
和sprintf
很常用,真的,sprintf+strlen
套装在字符串不是特别长时是很好的组合
by yummy @ 2020-08-07 16:58:37
@竹下的魂 scanf
在前面有空格时会跳过,所以应该是sscanf("%d%d",&a,&b)
,你这样写在原本就没有运算符(数字顶格)时会有问题,因为sscanf
指针会一直向后跳,直到出现空格
by konjacp @ 2020-08-07 16:59:15
@yummy 好吧那估计是我孤陋寡闻了...反正我读字符串都是要么scanf("%s")
要么getchar
的
by 竹下的魂 @ 2020-08-07 17:49:58
@yummy 大佬,你sscanf似乎少参了。。
by 竹下的魂 @ 2020-08-07 17:51:18
@yummy 而且我加了参之后按你说的也不行啊【可怜兮兮】
by 竹下的魂 @ 2020-08-07 19:04:31
已经解决问题了
by 竹下的魂 @ 2020-08-07 19:06:19
问题是fgets函数对于回车不会自动舍弃,在cin之后,输入缓冲区会留有一个回车符,fgets函数恰好读取了这一次回车,而不是真正有用的输入数据,所以导致全wa
by 竹下的魂 @ 2020-08-07 19:15:51
所以对于使用cin输入,我使用了cin.getline(cin,w)【w为string类型的变量,该函数需要包含头文件string】。同时对于scanf输入的,我使用了scanf("%d\n",&n);【也就是深基里面的写法】