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 :

un cin qui coince !


Sujet :

C++

  1. #1
    Membre averti Avatar de moniroge
    Homme Profil pro
    retrait�
    Inscrit en
    D�cembre 2016
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : retrait�

    Informations forums :
    Inscription : D�cembre 2016
    Messages : 18
    Par d�faut un cin qui coince !
    Bonjour.
    J'ai un exo sur tableau dynamique r�calcitrant � cause d'un cin
    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
     
    #include <iostream>
    #include <vector>
    using namespace std;
     
    int main()
    {
     vector<double> notesSur20;  
     for(int i(0); i<notesSur20.size(); ++i)
        {
         cout<<"donne une note sur 20 : ";
         cin >> notesSur20.push_back[0];  // ERROR : invalid types ‘<unresolved overloaded function type>[int]’ for array subscript
        }
     double moyenne(0); 
          for(int i=0; i<notesSur20.size(); ++i)
             {
               moyenne += notesSur20 [i]; 
             }
          moyenne /= notesSur20.size();  
         cout << "La moyenne de toutes ces notes est :  "<< moyenne << endl;
     return 0;
    }

  2. #2
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    push_back est une fonction, donc push_back[20] est une erreur.
    tu ne peux qu'appeler cette fonction (push_back(20)).

    Qui plus est, l'op�rateur >> n'est d�fini que pour cin et une r�f�rence modifiable vers certains types, dont double.

    Il faut donc proc�der en deux temps:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    double d;
    cin >> d;
    notesSur20.push_back(d);
    En fait, il y a deux sous parties � ta boucle.
    • lire une note, qui pourrait etre une fonction retournant la note
    • stocker la note lue dans une liste.

  3. #3
    Membre averti Avatar de moniroge
    Homme Profil pro
    retrait�
    Inscrit en
    D�cembre 2016
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : retrait�

    Informations forums :
    Inscription : D�cembre 2016
    Messages : 18
    Par d�faut
    hiii, merci ternelll en plus que c'est clair: je pige!!!
    Oui mais... heu, le code fonctionne, pas d'erreur:
    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
     #include <iostream>
    #include <vector>
    using namespace std;
     
    // moyenneDesValeursEntrees2
    /* Calcul de la moyenne des valeurs contenues dans un tableau (dynamique)
     * tableau dynamique: vector<type>nom(taille); et en haut un include <vector> */
     
    int main()
    {
     vector<double> notesSur20; 
     double note ; // je déclare la variable note qui répondra au cout ci-dessous
     for(int i(0); i<notesSur20.size(); ++i)
        {
         cout<<"donne une note sur 20 : ";
         cin >> note;  // ici l'utilisateur tape sa note
         notesSur20.push_back(note);
        }
     double moyenne(0); 
          for(int i=0; i<notesSur20.size(); ++i)
             {
               moyenne += notesSur20 [i]; 
             }
          moyenne /= notesSur20.size(); 
     cout << "La moyenne de toutes ces notes est :  "<< moyenne << endl;
     return 0;
    }
    donc le job fonctionne mais ne me demande pas "donne une note sur 20 : " et m'envoie:
    "La moyenne de toutes ces notes est : -nan
    ... s'est termin� avec le code 0 "

  4. #4
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par d�faut
    Quelle est la taille de ton vecteur au lancement du programme ?

  5. #5
    Membre averti Avatar de moniroge
    Homme Profil pro
    retrait�
    Inscrit en
    D�cembre 2016
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : retrait�

    Informations forums :
    Inscription : D�cembre 2016
    Messages : 18
    Par d�faut
    heu, je ne comprends pas trop la question;
    la taille du tableau, au d�part... nulle je suppose; c'est un tableau vide au d�part.

  6. #6
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par d�faut
    Et donc ?

    Qu'en d�duis-tu en tra�ant l'ex�cution de ton code, � la main ?

    Un indice : une valeur NaN (Not-a-Number) r�sulte le plus souvent d'une division par z�ro.

  7. #7
    Membre averti Avatar de moniroge
    Homme Profil pro
    retrait�
    Inscrit en
    D�cembre 2016
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : retrait�

    Informations forums :
    Inscription : D�cembre 2016
    Messages : 18
    Par d�faut
    Hi hi, tu me guides bien:
    quand j'ai vu ta suggestion avant de me coucher, j'�tais rouge de honte!!
    ben oui, j'ai divis� ma moyenne par z�ro avec ma fichue boucle!!! donc �a a tout arr�t�!!!
    Mais ce matin, j'�cris � la main et:
    pas du tout!! c'est en dehors de la boucle for que je fais la division:
    moyenne /= notesSur20.size();
    je divise la somme totale des cases par la taille du tableau
    et ici, le code doit voir la taille totale du tableau et donc ne pas dire nan !!!

  8. #8
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    Et ta boucle, elle commence comment?

  9. #9
    Membre averti Avatar de moniroge
    Homme Profil pro
    retrait�
    Inscrit en
    D�cembre 2016
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : retrait�

    Informations forums :
    Inscription : D�cembre 2016
    Messages : 18
    Par d�faut
    Ben ma boucle pour moyenne , comme toute boucle d'it�ration, commence avec la case num�ro 0
    moyenne += notesSur20 [0] � qui elle prend la valeur mise dedans et la met dans la variable moyenne
    continue avec la case num�ro1 dont elle prend la valeur et l'ajoute dans moyenne � celle de la case 0
    etc.
    et quand elle arrive � la derni�re case, [28] par exemple, moyenne a pour valeur la somme de toutes les valeurs,
    la boucle for s'arr�te et le programme passe � l'op�ration suivante:
    moyenne /= notesSur20.size();
    soit il va faire la division de la somme contenue dans moyenne par la taille du tableau : 29 pour mon exemple..
    �a devrait marcher!!! �a ne marche pas, vous avez �videmment raison
    et donc la faille dans mon code, je vois toujours rien
    et m�me, il me semble que je ne comprends plus rien.

  10. #10
    Membre Expert
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par d�faut
    Ligne 13, quel est le r�sultat de notesSur20.size() ? Et par extension, quand s'arr�te la boucle ?

  11. #11
    Membre averti Avatar de moniroge
    Homme Profil pro
    retrait�
    Inscrit en
    D�cembre 2016
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : retrait�

    Informations forums :
    Inscription : D�cembre 2016
    Messages : 18
    Par d�faut
    la ligne 13: for(int i(0); i<notesSur20.size(); ++i)
    eh bien la boucle commence avec i=0: la premi�re case du tableau
    et elle se termine... quand l'utilisateur ne cin pas note; soit qu'il ne tape plus � "donne une note sur 20 : "
    non ???
    Tiens, que mon d�but de boucle vous turlupine, je vais essayer ceci:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     int i(0); // je déclare la variable d'itération
     for(int i=0; i<notesSur20.size(); ++i)
    Ben, toujours "la moyenne de toutes ces notes: -nan
    Bon l�, ja vais me coucher... d'un exo simple, je fais un sac de noeuds!!!

  12. #12
    Invit�
    Invit�(e)
    Par d�faut
    Bonsoir,

    Tu vas trop vite dans ton raisonnement. Il ne faut pas penser en termes � je m'attends � ce que mon programme fasse ceci, cela et j'ai confiance dans ce que j'ai �crit � mais � ce que j'ai �crit ne va justement pas, et je l'analyse finement afin de savoir pourquoi il ne fait pas ce que j'attends �.

    Concentrons-nous sur cette partie de code :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    vector<double> notesSur20; 
    double note ; // je déclare la variable note qui répondra au cout ci-dessous
    for(int i(0); i<notesSur20.size(); ++i)
    {
        cout<<"donne une note sur 20 : ";
        cin >> note;  // ici l'utilisateur tape sa note
        notesSur20.push_back(note);
    }
    Matt_Houston t'a pos� une question tout � fait pertinente :
    Quelle est la taille de ton vecteur au lancement du programme ?
    � laquelle tu as parfaitement bien r�pondu :
    la taille du tableau, au d�part... nulle je suppose; c'est un tableau vide au d�part.
    et jo_link_noir a � nouveau mis le doigt dessus, mais sans grand succ�s... Et pourtant c'est tout le probl�me.

    Donc � nouveau : que vaut notesSur20.size() au d�part de ta boucle ? Quelle incidence cela a sur ta boucle ?

    r�flexion...

    Toujours pas de d�clic ? Quelles sont alors les diff�rentes �tapes et instructions de ta boucle ?
    Initialisation, condition, incr�mentation, instructions... D�cris-nous tr�s pr�cis�ment chacune de ces �tapes.
    Prends pour cela un papier et un crayon, et note pour chacune de ces �tapes les �tats des variables/expressions qui interviennent.

    Si tout va bien tu te rendras vite compte de quelque chose

  13. #13
    Membre Expert
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 513
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 513
    Par d�faut
    Autre indice : le code :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    vector<double> notesSur20; 
    double note;
    for(int i(0); i<notesSur20.size(); ++i)
    {
    	cout<<"donne une note sur 20 : ";
    	cin >> note;  // ici l'utilisateur tape sa note
    	notesSur20.push_back(note);
    }
    �quivaut au code :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    vector<double> notesSur20; 
    double note;
    {
    	int i(0);
    	while(i<notesSur20.size())
    	{
    		cout<<"donne une note sur 20 : ";
    		cin >> note;  // ici l'utilisateur tape sa note
    		notesSur20.push_back(note);
    		++i;
    	}
    }

  14. #14
    Membre averti Avatar de moniroge
    Homme Profil pro
    retrait�
    Inscrit en
    D�cembre 2016
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : retrait�

    Informations forums :
    Inscription : D�cembre 2016
    Messages : 18
    Par d�faut
    Merci � vous d'�tre aussi patient, hi hi...
    et d�sol� de vous r�pondre avec retard... (tit probl�me de sant�)
    Voil�, j'ai � peine commenc� � �crire sur un papier mon code (la moiti� d'une ligne)
    que hop!! la lumi�re (de vos projecteurs) :
    ben oui, quand la boucle for commence, c'est avec i=0 et la taille du tableau est nulle!! or j'ai la condition: i<notesSur20.size(); soit une impossibilit� qui => le nan � la console...
    et donc le dernier des Neurones s'empressa de corriger:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    for (int i=0; i<(notesSur20.size()+1); ++i)
    et enfin, la console demande la s�rie de notes...
    Donc ce probl�me r�gl�...
    Maintenant, je dois trouver moyen de demander qu'une fois la derni�re note entr�e,
    le job fasse la moyenne....
    bon, je m'y att�le.

  15. #15
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Non.
    Tu demandes � boucler sur i de 0 � taille du tableau, ton tableau est nul, donc tu boucles pas.
    Si par hasard tu bouclais, tu ajoutes une donn�es au tableau dans la boucle => boucle infinie.
    C'est pas un probl�me de programmation mais d'algorithmique.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  16. #16
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    En fait, il faut que tu trouves un moyen de trouver quelle est la derni�re note.
    Tu as deux solutions:
    demander avant le nombre de notes � lire.
    demander une r�ponse et voir si c'est une note, la fin de la liste ou encore une fausse manipulation.

    Le premier te permet de rester avec cin, mais ce n'est pas la bonne utilisation.
    Le second demandera que tu passes par un getline(cin, ligne) (ou ligne est une string), puis que tu analyses cette ligne (std::istringstream sera utile � cette fin)

  17. #17
    Membre averti Avatar de moniroge
    Homme Profil pro
    retrait�
    Inscrit en
    D�cembre 2016
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : retrait�

    Informations forums :
    Inscription : D�cembre 2016
    Messages : 18
    Par d�faut
    Hello Bousk!!
    Diantre, tout le forum vient m'aider!!! hi hi, c'est chouette!!!
    mais bon, vous ne me connaissez pas, vous allez vite en avoir marre de moi...
    Je suppose que Bousk n'a pas vu mon post de 15h27 ???
    En attendant, j'ai fait du progr�s que voici:
    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
    #include <iostream>
    #include <vector>
    using namespace std;
     
    int main()
    {
     vector<double> notesSur20;  // tableau vide: pas de parenthèses ni de taille
     double note ; 
     int i(0); 
     double moyenne(0); 
     
     // for(int i=0; i<notesSur20.size(); ++i)
        /* au départ de cette boucle, donc avec i=0, déjà un truc curieux: i doit
         * être < à la taille du tableau qui à ce moment est zéro: donc ça ne peut
         pas marcher. Je vais essayer ceci: */
     for (int i=0; i<(notesSur20.size()+1); ++i)
        {
         cout<<"donne une note sur 20 : ";
         cin >> note;  
         notesSur20.push_back(note);
         moyenne += notesSur20 [i];
         moyenne /= notesSur20.size();  
        }
     
     if(note<0 || note>20 )  // j'aimerais bien aussi mettre note !=int pour qui taperait une lettre
        {
         cout <<"Vous avez entré "<< notesSur20.size() <<" notes."<<endl;
         cout << "La moyenne de toutes ces notes est :  "<< moyenne << endl;
           }
     return 0;
    }
    ah ben zut alors!! il entrait les notes et si je mettais une note 23, hop!
    * il me disait: vous avez entr� 6 notes: super-chouette!
    puis pas de moyenne, et de plus, si je tapais la lettre a,
    * le code moulinait dans la choucroute quelque secondes...
    * � re-essayer, naouww, comme pr�sent� ci-dessus, il ne me dit m�me plus combien de notes j'ai entr�es

  18. #18
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par d�faut
    Non, Bousk r�pondait bien � ton post de 15h27. Lis bien attentivement les deux messages qui le suivent. Si tu ne comprends pas quelque chose dans les propos des intervenants, demande des compl�ments sur des points pr�cis.

  19. #19
    Invit�
    Invit�(e)
    Par d�faut
    Pose-toi la bonne question : tu souhaites continuer � boucler tant que quoi ?
    D�s que tu r�pondras de fa�on pos�e � cette question, tu auras ta bonne condition de boucle.

    ternel t'a d�j� donn� une bonne piste de r�flexion.

    En compl�ment, ce sujet de FAQ : Comment v�rifier les valeurs saisies avec cin ?

    Sinon concernant la partie suivante :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
         notesSur20.push_back(note);
         moyenne += notesSur20 [i];
         moyenne /= notesSur20.size();
    Hors code, reprends papier/crayon et prends les notes {5, 10, 15}.
    Quel r�sultat obtiens-tu ? Quel r�sultat devrais-tu obtenir ?

  20. #20
    Membre averti Avatar de moniroge
    Homme Profil pro
    retrait�
    Inscrit en
    D�cembre 2016
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : retrait�

    Informations forums :
    Inscription : D�cembre 2016
    Messages : 18
    Par d�faut
    Hi!!! ne croyez pas que j'ai laiss� tomber!!!
    En fait, j'ai regard� chacune de vos remarques, conseils, recommandations, hi hi
    et �a m'a demand� du temps pour faire �voluer mon code,
    si, il a �volu�... il a fonctionn�... pour se planter plus loin...
    et puis je d�couvre GitHub pour ne pas surcharger ici, est-ce que �a marche??? dites-moi, vous le voyez, mon code ???
    parce que GitHub, c'est �crit dans un anglais �pouvantable, tiens, je ne sais m�me pas supprimer, pas vu de delete....
    Ah oui, mon code...
    https://github.com/moniroje/moyenneD...aster/main.cpp
    et aujourd'hui que je suis en Suse: CodeBlocks ne marche pas, et, surprise, QtCreator ne marche plus...
    Donc demain, je retourne sur Debian et CodeBlocks.

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 2 12 Derni�reDerni�re

Discussions similaires

  1. requete supression qui coince
    Par jawed dans le forum Requ�tes et SQL.
    R�ponses: 9
    Dernier message: 20/03/2008, 23h47
  2. update qui coince
    Par Empty_body dans le forum PostgreSQL
    R�ponses: 1
    Dernier message: 13/03/2008, 17h38
  3. R�ponses: 3
    Dernier message: 30/03/2007, 18h03
  4. Multiples Jointures qui coince...
    Par Zeprecheur dans le forum Requ�tes
    R�ponses: 3
    Dernier message: 29/03/2006, 12h20
  5. R�ponses: 4
    Dernier message: 09/02/2006, 14h00

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