我在这段代码(C ++)中犯了什么错误?

时间:2015-09-12 07:29:08

标签: c++

我在codechef上解决了一个问题: https://www.codechef.com/NITWMA01/problems/QPALIN。从用户获取m的值后,需要输入m个输入案例。我总是习惯于循环: 而(M--) {//输入测试用例},但在这个问题中我不知道为什么循环运行少于m次,当我必须得到输入情况m次。我尝试使用示例输入运行代码(m为6)但main()在获得4个输入后返回0(并且printint各自的输出在必要时)。 我的代码如下:

#include<iostream>
#include<cstdio>
#include<string.h>

using namespace std;

int main()
{
   int n,m,op,x,l,r,i,j,xorpair=0;
   char k,s[100000];
   scanf("%d",&n);
   scanf("%s",s);
   scanf("%d",&m);
   for(j=0;j<m;j++)
   {
     scanf("%d",&op);
     if(op==1)
     {
       scanf("%d",&x);
       scanf("%c",&k);
       s[x-1]=k;
     }
     else
     {
      xorpair=0;
      scanf("%d%d",&l,&r);
      for(i=l-1;i<r;i++)
      {
        xorpair^=s[i]-'0';
      }
        if(xorpair==0)
        {
            printf("YES\n");
        }
        else printf("NO\n");
     }

   }
    return 0;
}

PS:我用scanf取代了cin。另外我相信我无法正确传达我面临的问题。所以这里的测试用例更清楚地解释了它:

(应该是什么样的) 样本输入:
7
abbacca
6
2 1 4
1 1 z
2 1 4
1 4 z
2 1 4
2 5 7

样品输出:
YES
NO
YES
是的

以下是我面临的问题: 当我为上述输入运行程序时,这就是输出屏幕上显示的内容

7
abbacca
6
2 1 4
YES
1 1 z
2 1 4
NO
1 4 z

进程返回0(0x0)

我无法输入6次输入,第4次输入后返回0。

1 个答案:

答案 0 :(得分:0)

scanf("%c"没有达到你所期望的效果。它只读取您想要的字符之前的' '。然后下一次尝试阅读op并且x失败,op仍然等于1,所以你每执行一次就会执行两次操作。