testcase没有在c程序中运行

时间:2015-05-30 05:10:01

标签: c debugging testcase

我是c程序的新手,在调试程序时面临困难。在下面的代码测试用例2没有运行。我发现错误是在第二个测试用例中读取interger n。有人请解答这个问题。也请推荐一些可以使用终端调试c程序的工具。谢谢你们的帮助

#include <stdio.h>
#include <stdlib.h>

int read(){
   int r = 0;
   char c = getchar_unlocked();
   while(c >= '0' && c <= '9'){
      r = r*10 + c - 48 ;
      c = getchar_unlocked();
   }
   return r;
}

void main(){
   int t = 0;
   t = read();
   int rr = 0;
   for(rr = 0;rr < t;rr++){
      int i,n = 0;
      n = read();
      int *p = (int *)calloc(n,sizeof(int));
      for(i = 0;i < n;++i){
         *(p+i) = getchar_unlocked() - 48;
      }
      int no,nz = 0;
      for(i = 0;i < n;++i){
         if(*(p+i) == 0){nz += 1;}
         if(*(p+i) == 1){no += 1;}
      }
      int k = 0;
      if(((no)%2 == 0) && ((nz)%2) == 0){
         k = -1;
      }
      if(((no)%2 == 0) && ((nz)%2) == 1){
         k = 0;
      }
      if(((no)%2 == 1) && ((nz)%2) == 0){
         k = 1;
      }
      if(((no)%2 == 1) && ((nz)%2) == 1){
         k = 1;
      }
      int result = 0;printf("%d\n",5556);
      if(k == 1){
         for(i = 0;i < n;++i){
            if(*(p+i) == 1){
               result = i+1 ;
               break;
            }
         }

      }
      if(k == 0){
         for(i = 0;i < n;++i){
            if(*(p+i) == 0){
               result = i+1 ;
               break;
            }
         }
      }
      printf("%d\n",result);
   }
}

1 个答案:

答案 0 :(得分:1)

您读取整数的策略存在缺陷。您没有跳过空格的逻辑。我将函数名称更改为int read(){ int n; if ( scanf("%d", &n) != 1 ) { // Deal with the error } return n; } 并将其实现更改为

*(p+i) = getchar_unlocked() - 48;

另外,更改

*(p+i) = read_int();

p[i] = read_int();

或更直观的版本:

main

通过这些更改,我可以阅读和处理这些数字。但我仍然得到错误的输出。我会告诉你代码中的逻辑错误。

其他评论

int预计会返回-Wall。如果您的编译器没有抱怨,那么是时候提高警告级别了。我默认使用#include <stdio.h> #include <stdlib.h> int read_int(){ int n; if ( scanf("%d", &n) != 1 ) { // Deal with the error. } return n; } int main(){ int t = 0; int rr = 0; t = read_int(); printf("t = %d\n", t); for(rr = 0;rr < t;rr++){ int i,n = 0; n = read_int(); printf("n = %d\n", n); int *p = (int *)calloc(n,sizeof(int)); for(i = 0;i < n;++i){ p[i] = read_int(); printf("p[%d] = %d\n", i, p[i]); } int no,nz = 0; for(i = 0;i < n;++i){ if(*(p+i) == 0){nz += 1;} if(*(p+i) == 1){no += 1;} } int k = 0; if(((no)%2 == 0) && ((nz)%2) == 0){ k = -1; } if(((no)%2 == 0) && ((nz)%2) == 1){ k = 0; } if(((no)%2 == 1) && ((nz)%2) == 0){ k = 1; } if(((no)%2 == 1) && ((nz)%2) == 1){ k = 1; } int result = 0; // printf("%d\n",5556); if(k == 1){ for(i = 0;i < n;++i){ if(*(p+i) == 1){ result = i+1 ; break; } } } if(k == 0){ for(i = 0;i < n;++i){ if(*(p+i) == 0){ result = i+1 ; break; } } } printf("%d\n",result); } return 0; }

当您正在调试代码时,最好先测试读取输入的代码,以确保在读取输入时没有错误。

以下是我对您的代码所做的事情:

new Thread(){
    public void run(){
        log(SOME_TEXT);
    }
}.start();