IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

"too few arguments" à l'initialisation d'une fonction


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Octobre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 11
    Par défaut "too few arguments" à l'initialisation d'une fonction
    Bonjour,

    Je commence le C++, et avec les quelques base que j'acquers, je fais quelques petits essais...

    Voilà l'un d'eux: Le but est de calculer tous les nombres premiers jusqu'au nombre entré par l'utilisateur...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
     
    //
    //
    //
    // - Template -
    #include <cstdio>
    #include <cstdlib>
    #include <iostream>
    using namespace std;
     
     
    int limite;
    int base[512];
    int tested;
    int result;
     
     
    // Déclaration du prototype
     
    int test(int tested , int base[]);
     
     
    int main(int nNumberofArgs, char* pszArgs[])
    {
        // Enumère les nombre de 1 à limit.
     
     
     
     
            // Demande à l'utilisateur jusqu'à quel nombre il veut aller
     
            cout << "Entrez la limite : ";
            cin >> limite;
     
            tested = 2;
     
            for (int k=0;k!=limite;k++)
            {
            result = test(tested);
     
            cout << result << endl;
     
            tested++;
            }
     
     
     
    }
     
        // Pause
     
        system("Pause");
        return 0;
    }
     
     
     
    // Teste le nombre en cours
     
     
    int test(int tested , int base[])
    {
     
    int n=0;
     
     
    for (;n!=5;)
    {
     
     
        // Ajoute le nombre testé à base s'il est premier
     
        if (tested%base[n]!=0 )
        {
                        base[n] = tested;
     
                        return tested;
     
     
     
                        break;
     
                        }
     
                        n++;
     
                        continue;
                        }
     
    }

    Le compilateur me dit "too few arguments to fonction 'in test(int, int*, int)'" à la ligne 19...

    Quelqu'un pourrait m'indiquer en quoi c'est faux? et éventuellement s'il y a d'autres endroits ou le programme pourrait ne pas fonctionner?

    Merci beacoup pour votre aide, et bonne année à tous!

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Bonjour,
    Citation Envoyé par mr:titi7 Voir le message
    Le compilateur me dit "too few arguments to fonction 'in test(int, int*, int)'" à la ligne 19...
    ??? Tu ne te trompe pas dans l'erreur???
    sinon cette ligne ne marchera pas :
    car test est déclaré comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int test(int tested , int base[]);
    il manque le deuxième paramètre

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Le compilateur se plaint tout simplement que le nombre d'arguments passés à la fonction n'est pas le même que le nombre d'argument attendu par la fonction (la traduction "litérale" de l'erreur est "trop peu d'arguments passés à la fonction 'nom de la fonction'")

    Mongaulois ==> non, c'est bien l'erreur qui doit être gérée le compilateur se plaint d'avoir un seul argument là où deux sont attendu par le prototype de la fonction

    mr:titi7==> Pour compléter l'information, en C++, il existe une classe vector, disponible par inclusion du fichier d'en-tête <vector> dans l'espace de nommage std qui permet de gérer bien mieux les tableaux que ce qui se fait "classiquement" en C...

    L'utilisation de cette classe (ainsi que de toutes celles que l'on retrouve dans la S(T)L d'ailleurs) est fortement préférable à toute mise en oeuvre généralement rencontrées en C
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Qio,

    Il faudrait soigner un peu la présentation du code, cela te permettrait par exemple de voir du code inutile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for (;n!=5;)
    {
        // Ajoute le nombre testé à base s'il est premier
     
        if (tested%base[n]!=0 )
        {
            base[n] = tested;
            return tested;
            break; // on ne passe jamais ici, puisque placé juste après un return
        }
     
        n++; // pourquoi mettre ça ici, la syntaxe de la boucle for prévoit une place pour ça
        continue; // inutile, puisque derrnière instruction du corps de boucle.
    }

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Mongaulois ==> non, c'est bien l'erreur qui doit être gérée le compilateur se plaint d'avoir un seul argument là où deux sont attendu par le prototype de la fonction
    ben non, enfin a moitié...
    "too few arguments to fonction 'in test(int, int*, int)'" à la ligne 19
    1- c'est pas a la ligne 19
    2- int test(int tested , int base[]); il n'y as pas de troisieme paramètre
    3- oui il manque un argument

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    En fait, cette erreur est *relativement* imprécise...

    Car, l'un dans l'autre, on peut considérer que c'est le prototype qui fait fois, mais, dans quelle mesure l'appel la fonction n'est elle pas plus cohérente si on lui fournit plus d'argument que ce que demande le prototype (meme si, dans ce cas là, c'est qu'il y a eu un problème lorsque l'on a réfléchi au comportement à donner à cette fonction )

    En plus, je *crois* que l'erreur reste la meme avec un prototype demandant deux arguments et en recevant trois qu'avec un prototype demandant trois arguments et en recevant deux (too few) ...
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Membre régulier
    Inscrit en
    Octobre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 11
    Par défaut
    Merci les gens!

    J'ai regardé ce que je pouvais faire pour renvoyer autant de variables à la fonction que ce que je déclarais.

    n et base sont inutiles depuis main, puisque utilisés depuis test uniquement.

    Mais maintenant, j'ai un autre problème...

    Les nombres ne sont pas correctement testés, puisque base[] ne reste pas entre deux appels de test. J'ai donc déclaré base[] comme static, pour qu'elle reste entre chaque appel. Mais visiblement, ça fait planter le programme...

    J'ai lancé en debug, et l'erreur semble être à la ligne 74... Il me dit qu'il peut pas voir les variables n et base[]... Pourquoi? Elles sont pourtant déclarés dans la fonction et précédemment... Si vous pouviez m'expliquer...^^

    Voilà le code actuel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    //
    //
    // Affiche les nombres premiers jusqu'à la limite
    // donnée par l'utilisateur.
    #include <cstdio>
    #include <cstdlib>
    #include <iostream>
    using namespace std;
     
     
    int limite;
     
    int tested;
    int result;
     
     
    // Déclaration du prototype
     
    int test(int tested);
     
     
    int main(int nNumberofArgs, char* pszArgs[])
    {
        // Enumère les nombre de 1 à limit.
     
     
     
     
            // Demande à l'utilisateur jusqu'à quel nombre il veut aller
     
            cout << "Entrez la limite : ";
            cin >> limite;
     
            tested = 2;
     
            for (int k=0;k!=limite;k++)
            {
            result = test(tested);
     
            cout << result << endl;
     
            tested++;
            }
     
     
     
     
     
        // Pause
     
        system("Pause");
        return 0;
    }
     
     
     
    // Teste le nombre en cours
     
     
    int test(int tested)
    {
     
     
    static int base[5];
    int n=0;
     
     
    for (int n=0;n!=4;n++)
    {
     
     
        // Ajoute le nombre testé à base s'il est premier
     
        if (tested%base[n] != 0 )
        {
                        base[n] = tested;
     
                        return tested;
     
     
     
                        }
     
     
     
                        }
     
    }

Discussions similaires

  1. [XML] Warning: sprintf() [function.sprintf]: Too few arguments
    Par lodan dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 10/09/2009, 10h35
  2. sprintf(): Too few arguments
    Par hadjiphp dans le forum Langage
    Réponses: 8
    Dernier message: 05/06/2009, 22h40
  3. Arguments optionnels en entrée d'une fonction
    Par ricololo dans le forum MATLAB
    Réponses: 3
    Dernier message: 30/09/2008, 13h33
  4. [PHP-JS] Variable PHP comme argument dans l'appel d'une fonction Javascript
    Par The Molo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/04/2007, 09h00
  5. erreur too few arguments ; recup valeur boucle
    Par Sam 069 dans le forum Access
    Réponses: 2
    Dernier message: 26/07/2006, 17h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo