9
votes

Transmettre un tableau en tant que paramètre avec des valeurs par défaut dans Int Main ()

J'ai de la difficulté à transmettre un tableau comme un argument dans int Main () code> avec des valeurs par défaut. Par exemple: xxx pré>

fonctionne merveilleusement. Comme P>

#include <iostream> 
#include <string>
void p(std::string v){std::cout<<v;}
std::string v[13] = {"A Partridge in a Pear Tree.\n\n","2 Turtle Doves\n","3 French Hens\n","4 Colly Birds\n","5 Gold Rings\n","6 Geese-a-Laying\n","7 Swans-a-Swimming\n","8 Maids-a-Milking\n","9 Ladies Dancing\n","10 Lords-a-Leaping\n","11 Pipers Piping\n","12 Drummers Drumming\n",""};
int main(){
    switch(v[12].length()){
        case 12:system("pause"); return 0;
        case 11:p(v[11]);
        case 10:p(v[10]);
        case 9: p(v[9]);
        case 8: p(v[8]);
        case 7: p(v[7]);
        case 6: p(v[6]);
        case 5: p(v[5]);
        case 4: p(v[4]);
        case 3: p(v[3]);
        case 2: p(v[2]);
        case 1: p(v[1]);
        case 0: p(v[0]); 
    }v[12] += "0";
    main();
}


11 commentaires

Pourquoi voulez-vous faire cela et pourquoi devez-vous le faire à Main ?


A Main () Fonction Prenant uniquement un int ou un tableau n'est pas une forme valide de Main () dans la norme C ++. Qu'est-ce que vous essayez de faire ici?


INT A [1] est un seul élément dans un tableau pas un tableau d'un élément


Si votre intention est de définir les valeurs par défaut (ou initialiser le tableau en cours de transmission) - vous devez le faire à l'intérieur de la fonction principale.


Il est interdit d'appeler principal () dans un programme C ++. Vous devez créer une autre fonction récursive.


"interdit"? Eh bien, il compile / se déroule comme il est avec Visual Studio Pro ...


@Michael: il n'est pas autorisé par la norme. Vous devez déplacer toute votre logique dans une autre fonction que vous êtes autorisé à appeler de manière récursive.


Til!


@Michael: Ce n'est pas ce que nous voulons dire. C'est une norme de codage d'une certaine importance (plutôt élaborée), nous parlons de la norme Language , le document qui définit ce que C ++ est.


Bien sûr, si votre professeur veut ou non la norme C ++ / est un bon professeur est une autre affaire.


@Gman Long Blink Ahh ... ampoule.


4 Réponses :


3
votes

La fonction principale () code> ne doit recevoir aucun ou deux paramètres la quantité d'arguments de ligne de commande et des arguments lui-même.

void loop(int i) { 
    if (i < 0) { v[12] += "0"; return; }
    p(v[i]);
    loop(i-1);
}
int main() {
    if (v[12].size() == 12) return;
    loop(v[12].size());
    main();
}


5 commentaires

Donc, la principale ne peut pas recevoir d'arguments par défaut, comme un constructeur ou une autre fonction peut? Exemple: int principal (int A = 5) {}


Ce n'est pas standard. Mais vous pouvez faire beaucoup de choses là-bas pour réduire le nombre de lignes. Un pour par exemple réduira tant de lignes.


Un pour serait assez bénéfique! Malheureusement, l'une des exigences était «pas de boucle» car il essaie de nous apprendre le pouvoir de la récursivité.


Ok je ne jouerai plus avec ton jouet!


Je suis tenté de transformer ce dernier édition dans, mais ma la conscience de dang ne me laissera pas



17
votes

Ce lien explique le mieux:

en C ++, il n'est pas possible de passer un bloc de mémoire complet par valeur en tant que paramètre à une fonction, mais nous sommes autorisé à passer son adresse.

C'est pourquoi vous pouvez déclarer une fonction avec xxx

mais vous ne pouvez pas déclarer xxx

Cela n'a rien à voir avec principal () .


2 commentaires

Grand lien et explication simple. UPVOTE POUR VOUS (Arg! Aucun opte en tant que fonction de faible réputation)


Avec C ++ 0x, vous pouvez! Mais ce tableau serait détruit quand il sera hors de portée.



1
votes
#include <stdio.h>
int go(int);
int main( int argc, char*argv[]) {
go(0);
}
int go(int argc) {
const char* lyrics[] = {...};
printf("On the %d%s day of Christmas\nmy true love gave to me\n",argc,
  argc==1?"st":argc==2?"nd":argc==3?"rd":"th" );
for(int i=argc-1;i>0;--i) { printf("%d %s\n",i+1,lyrics[i]); }
printf("%s\n\n",lyrics[0]);

if( argc < 12 ) go(argc+1);
return 0;
}

0 commentaires

7
votes

S'attaquer au tableau passant plutôt que l'utilisation improbable de la principale (), due à la matrice étant réellement passée en tant que pointeur, vous pouvez le faire comme ceci: xxx


0 commentaires