2017-04-21 3 views
-2
#include<stdio.h> 
int arr[12][5]; 


int score[12][5]; 
int n; 

void chk(){ 
    int score = 0; 
    for(int i=n-1;i>=0;i--){ 
     for(int j = 0;j<5;j++){ 
      scanf("%d",&(arr[i][j])); 
     } 
    } 


    for(int i = n-1;i>=0;i--){ 
     for(int j=0;j<5;j++){ 
      if(i==n-1) 
       score[i][j] = arr[i][j]; 
      else{ 
       int mx = score[i+1][j]; 
       if(j>0 && score[i+1][j-1]>mx) 
        mx = score[i+1][j-1]; 
       else if(j<4 && score[i+1][j+1]>mx) 
        mx = score[i+1][j-1]; 
       score[i][j] = arr[i][j] + mx; 
      } 
     } 
    } 

    int mx_score = score[0][2]; 
    if(score[0][1]>mx_score){ 
     mx_score = score[0][1]; 
    } 
    else if(score[0][3]>mx_score){ 
     mx_score = score[0][3]; 
    } 

    printf("%d",mx_score); 
} 

int main(){ 
    int T; 
    scanf("%d",&T); 
    for(int i = 0;i<T;i++){ 
     scanf("%d",&n); 
     chk(n); 
    } 
return 0; 
} 

Compilation erreur:Pourquoi ce code entraîne-t-il une erreur de compilation? [C, variables globales, tableau 2D]

Subscripted value is not an array, pointer or vector. 

La variable qui provoque l'erreur est score. Je ne comprends pas pourquoi arr fonctionne bien, mais pas score. Et comment écririez-vous ce code mieux?

indenté le bien que je pense

+1

Une façon d'améliorer le code est de l'indenter correctement. –

+0

Désolé, à ce sujet. – 4words

+0

Bien que les modifications apportées à la question pour fournir des informations supplémentaires soient encouragées, les modifications qui modifient suffisamment la question pour invalider une réponse déjà publiée ne sont pas autorisées. En fait, le consensus est que tout utilisateur avec [modifier les privilèges] (http://stackoverflow.com/help/privileges/edit) devrait annuler ces modifications. Je le ferai peu après la publication de ce commentaire. Veuillez noter que cela ne vous empêche pas de changer complètement une question avant que les réponses ne soient postées. Nous serons heureux de répondre à une [nouvelle question] (http://stackoverflow.com/questions/ask) sur votre nouveau numéro. – Makyen

Répondre

0
int score[12][5]; 
void chk() { 
int score = 0; 
... 

Vous redéclarer score; donc dans le cadre de la fonction chk, score représente un int pas un tableau ni un pointeur. Par conséquent, le

Compilation error: Subscripted value is not an array, pointer or vector.

La déclaration d'une variable locale masque toute variable globale portant le même nom. Si vous avez besoin les deux variables dans le même portée, donnez-leur différents noms.