2017-07-24 109 views
-6

我想解決在線法官(問題1318)在c。的問題。我不能讓我的代碼運行,我不知道什麼是錯

#include <stdio.h> 

int main() { 
    int N, M, a[M], i, j, fake; 
    while (1) { 
     scanf("%d %d", & N, & M); 
     fake = 0; 

     if (N == 0 && M == 0) { 
      break; 
     } 
     for (i = 0; i < M; i++) { 
      scanf("%d", & a[i]); 
     } 
     for (i = 0; i < M; i++) { 
      printf("%d ", a[i]); 
     } 
     for (i = 0; i < M - 1; i++) { 
      for (j = i + 1; j < M; j++) { 
       if (a[i] == a[j]) { 
        fake = fake + 1; 
        break; 
       } 
      } 
     } 
     printf("%d\n", fake); 
    } 
    return 0; 
} 

此代碼顯示運行時錯誤...我不知道如何解決這個問題,我不知道如果在我的代碼中有任何錯誤。

+2

'INT N,M,一個[M],' - 不,使用initintialized變種尺寸VLA :( –

+1

使用這樣的#include

+0

什麼是你的輸入?期望的和實際的輸出是什麼? –

回答

1

M未初始化! 在創建數組a或使a大到足以包含所有可能的輸入大小並使用M來限制對a的訪問之前,請閱讀M。後者在競爭性編程中很常見:創建一個足夠大的靜態數組,然後根據其他信息僅使用其中的一部分,如M

不管怎樣,錯誤將很容易被察覺使編譯器警告Wall -Wextra: 這裏是gccclangicc抱怨。

gcc -Wall -Wextra -g -O3 -Wshadow test.c 
test.c: In function ‘main’: 
test.c:7:1: warning: ‘M’ is used uninitialized in this function [-Wuninitialized] 
int N, M, a[M], i, j, fake; 

      ^~~ 

clang -Wall -Wextra -g -O3 -Wshadow test.c 
test.c:7:13: warning: variable 'M' is uninitialized when used here 
     [-Wuninitialized] 
int N, M, a[M], i, j, fake; 

     ^
test.c:7:9: note: initialize the variable 'M' to silence this warning 
int N, M, a[M], i, j, fake; 
      ^
     = 0 
1 warning generated. 

icc -Wall -Wextra -g -O3 -Wshadow test.c 
test.c(7): warning #592: variable "M" is used before its value is set 
    int N, M, a[M], i, j, fake; 
相關問題