#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int t,n,x,i,j;
char st[50];
scanf("%d",&t);
for(i=0;i<t;i++)
{
scanf("%d %d",&n,&x);
for(j=0;j<n;j++)
{
scanf("%c",&st[j]);
if(st[j]=='A')
x=x*1;
if(st[j]=='B')
x=x*-1;
}
printf("%d",x);
}
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
return 0;
}
代码的输入格式为:
t
n x
some_string_having_A_and_B
样品:
1
3 10
ABA
预期产出
-10
实际输出
10
如果-10
的数量为奇数,则此代码会提供B
,如果10
的数量为偶数,则此代码会B
。我知道编写程序的正确和最佳方式,但我无法弄清楚,为什么这段代码会产生错误的输出。
答案 0 :(得分:0)
第一个scanf("%c")
读取输入流中的上一个ENTER。
建议快速修复:使用规范中的空格让scanf
忽略空格(Enter是空格)。
尝试
if (scanf(" %c", &st[j]) != 1) /* error */;
// ^ ignore whitespace
建议更好的解决方法:使用fgets()
读取所有用户输入。
char line[100];
...
fgets(line, sizeof line, stdin);
if (sscanf(line, "%c", &st[j]) != 1) /* error */;
答案 1 :(得分:-1)
if(st[j]=='B')
x=x*-1;// you need to put bracket here.on -1
//correct form is x=x*(-1)
}
//corrected code starts from here
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int t,n,x,i,j;
char st[50];
scanf("%d",&t);
for(i=0;i<t;i++)
{
scanf("%d %d",&n,&x);
for(j=0;j<n;j++)
{
scanf("%c",&st[j]);
if(st[j]=='A')
x=x*1;
if(st[j]=='B')
x=x*(-1);// you need to put bracket here.on -1
}
printf("%d",x);
}
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
return 0;
}