c程序没有正确输入并产生错误的输出

时间:2015-05-09 15:15:40

标签: c string

#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。我知道编写程序的正确和最佳方式,但我无法弄清楚,为什么这段代码会产生错误的输出。

2 个答案:

答案 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;

}