簡體   English   中英

測試用例不在C程序中運行

[英]testcase not running in c program

我是C程序的新手,並且在調試程序時遇到困難。在下面的代碼測試用例2中未運行。我發現錯誤是在第二個測試用例中讀取整數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);
   }
}

您讀取整數的策略存在缺陷。 您沒有跳過空格的邏輯。 我將函數名稱更改為read_int並將其實現更改為

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM