2017-04-21 2 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 Fehler:Warum führt dieser Code zu einem Kompilierungsfehler? [C, Globale Variablen, 2D Array]

Subscripted value is not an array, pointer or vector. 

Die Variable, die den Fehler verursacht score ist. Ich verstehe nicht, warum arr funktioniert gut, aber score nicht. Und wie würdest du diesen Code besser schreiben?

Indented die richtig glaube ich

+1

Eine Möglichkeit, den Code zu verbessern, besteht darin, ihn richtig einzurücken. –

+0

Entschuldigung. – 4words

+0

Während [edit] s zu der Frage aufgefordert werden, zusätzliche Informationen bereitzustellen, sind Änderungen, die die Frage ausreichend ändern, um eine bereits gepostete Antwort ungültig zu machen, nicht zulässig. In der Tat ist der Konsens, dass jeder Benutzer mit [Bearbeitungsberechtigungen] (http://stackoverflow.com/help/privileges/edit) solche Änderungen rückgängig machen sollte. Ich werde dies tun, kurz nachdem ich diesen Kommentar gepostet habe. Bitte beachten Sie, dass Sie dadurch nicht daran gehindert werden, eine Frage vollständig zu ändern, bevor Antworten gepostet werden. Wir würden uns freuen, eine [neue Frage] (http://stackoverflow.com/questions/ask) zu Ihrem neuen Problem zu beantworten. – Makyen

Antwort

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

Sie neu deklarieren score; Im Rahmen der chk-Funktion repräsentiert score also ein int kein Array noch ein Zeiger. Daher die

Deklaration einer lokalen Variablen verbirgt alle globalen Variablen mit demselben Namen. Wenn Sie beide Variablen innerhalb des gleichen Bereichs benötigen, geben Sie ihnen andere Namen.

Verwandte Themen