PDA

View Full Version : [C++] Problemi Dichiarazione Array Come Variabili Globalu


skeleton
10-03-2011, 13:58
Salve a tutti,
ho compilato questo programma allo scopo di ordinare un gruppo di dati immessi (nome-cognome atleti e il tempo della loro prestazione) in ordine crescente. Purtroppo quando vado a dichiarare le due array, una contenente il nome-cognome dell'atleta (è una matrice di tipo char), l'altra il tempo della prestazione di ogni singolo, come variabili globali Dev-C++ mi da errore ("variable-size type declared outside of any function").

Ecco il codice:
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;

int MAX;
char atl[MAX][50];
double tempo[MAX];

void InserisciDati();
void Classifica();
void PubblicaClassifica();
void Scambia(char, char);

main(){
cout<<"GARA DI CORSA CAMPESTRE\n\n\n";
cout<<"Inserire Numero Partecipanti: ";
cin>>MAX;
InserisciDati();
cout<<"GARA DI CORSA CAMPESTRE\n\n\nPartecipanti: "<<MAX;
cout<<"Classifica Finale:";
Classifica();
PubblicaClassifica();
getch();
}

void InserisciDati(){
char testo1, testo2;
for(int i=1; i<=MAX; i++){
cout<<"\n\nInserire Nome "<<i<<"° Classificato: ";
cin>>testo1;
cout<<"\nInserire Cognome "<<i<<"° Classificato: ";
cin>>testo2;
testo1 = testo1 + ' ' + testo2;
atl[i][50]=testo1;
cout<<"\nInserire Tempo: ";
cin>>tempo[i];
}
}

void Classifica(){
for(int i=2; i<=MAX;i++)
for (int j=1; j<=MAX;j++)
if (atl[j][50] < atl[i][50]) {
Scambia(atl[i][50], atl[j][50]);
}
}

void Scambia(char a, char b){
char c;
c=a;
a=b;
b=c;
}

void PubblicaClassifica(){
for (int i=0; i<=MAX; i++)
(i=0) ? cout<<"Nome Cognome Tempo" : cout<<atl[i]<<" "<<tempo[i];
}

Potreste aiutarmi a risolvere il problema?

Grazie a tutti.

radoen
10-03-2011, 22:48
il problema è nel fatto che non dichiari la dimensione degli array ma assegni la dimensione MAX che leggi poi da tastiera ma C (ansi) non lo consente. Per ovviare al problema dovresti:
a) dare una grandezza al posto di MAX
b) Dare una Grandezza Base e poi allocare dinamicamente il resto
c) con o standard C99 si possono dichiarare array con dimensione nota a runtime ma li dipende dal compilatore che usi, in generale dovresti mettere un Flag per dirgli di usare il C99 e non l'89 come standard

Don[ITA]
11-03-2011, 00:19
Potresti ovviare al problema usando direttamente le collezioni dinamiche del C++ :D