2017-07-27 7 views
0

im supposé créer un principal avec argoment comme "int main (int argc, char * argve [])" le premier est le type (peut être "int/long/char ") d'un tableau et seconed est la taille, et je dois allouer le tableau basé sur le type choisi j'ai obtenu la taille avec la fonction atoi easlly mais je ne peux pas comprendre comment obtenir le type dans le bon pointeur de choisi tapez je ne comprends pas simplement comment ce casting fonctionne et comment le lancer pour chaque type correctement,
une explication de la façon de le faire correctement?problèmes avec l'allocation d'un tableau avec le type argoment principal

thats ce que je suis arrivé à ce jour

int main(int argc, char* argv[]) 
{ 
    int size = atoi(argv[2]); 


    if (strcmp(argv[1], "int") == 0) 
    { 
     int* arr = nullptr; 
    } 
    if (strcmp(argv[1], "long") == 0) 
    { 
     long* arr = nullptr; 
    } 
    if (strcmp(argv[1], "char") == 0) 
    { 
     char* arr = nullptr; 
    } 

} 
+0

Vous avez pas coulé! Êtes-vous censé définir 'void * arr'? C'est une très mauvaise tâche. YAIT (encore un teachert incompétent) –

Répondre

0

Il fonctionne en raison de portée des variables. Vos 3 variables arr sont étendues en blocs dans 3 blocs distincts, donc même si elles partagent le même nom, les compilateurs les voient comme 3 variables différentes, donc il est bon qu'elles soient de types différents. Cela étant dit, cela ne serait pas une bonne pratique en code réel, car cela ajoute une complexité inutile pour un lecteur humain.

1

Vous pouvez faire une nouvelle fonction avec un template et l'appeler de main:

template <class T> 
int realmain(int size) 
{ 
    T *arr = new T[size]; 
    //whatever you want to do 

    delete []arr; 
    return 0; 
} 

int main(int argc, char* argv[]) 
{ 
    int size = atoi(argv[2]); 


    if (strcmp(argv[1], "int") == 0) 
    { 
     return realmain<int>(size); 
    } 
    if (strcmp(argv[1], "long") == 0) 
    { 
     return realmain<long>(size); 
    } 
    if (strcmp(argv[1], "char") == 0) 
    { 
     return realmain<char>(size); 
    } 
} 
+0

mais comment puis-je obtenir le tableau à l'agian principal? –

+0

Vous n'avez pas à le faire, quoi que vous vouliez faire dans 'main', faites le dans' realmain' (vous pouvez choisir un meilleur nom en fonction de la tâche). – mch

+0

Je comprends votre solution, mais j'ai besoin d'obtenir l'arr en soi et de continuer à travailler sur d'autres fonctions –