Tableau dynamique et std::cin [Résolu]

madhack 24 Messages postés lundi 28 novembre 2016Date d'inscription 27 avril 2017 Dernière intervention - 28 nov. 2016 à 23:28 - Dernière réponse : madhack 24 Messages postés lundi 28 novembre 2016Date d'inscription 27 avril 2017 Dernière intervention
- 29 nov. 2016 à 22:42
Bonjour,

Je viens de commancer à apprendre le c++ avec le livre du zero (ancien nom) de Monsieur NEBRA et SCHALLER.

Au niveau du chapitre sur les tableaux dynamiques, j'ai voulu créer un petit programme qui prend la forme suivante :

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<double>tableauNoteUserDynamique(0);
    char yesNoUserNeed();
    do
    {
        cout<<"Veuillez entrer votre note : "<<endl;
        cin>>tableauNoteUserDynamique.push_back();
        cout<<"Avez vous d'autres note a enregistrer yes(y) no (n)"<<endl;
        cin>>yesNoUserNeed;
    }while(yesNoUserNeed==y);
    return 0;
}


L'objectif est de permettre à un utilisateur de rentre autant de note qu'il le veuille.
Je suis rentré dans une boucle do while peut être mal écrite avec l’égalité mais l'erreur vient de la ligne :
cin>>tableauNoteUserDynamique.push_back();
D:\c++\madbox\fonction\tableau\moyenneTabUserDynamique\main.cpp|14|error: no matching function for call to 'std::vector<double>::push_back()'|


Voila si quelqu'un pouvais éclairer ma lanterne merci d'avance.

Veuillez excuser mon orthographe et surtout les grossièretés que je peux écrire en C++

Cordialement madbox
Afficher la suite 

3 réponses

Répondre au sujet
nagaD.scar 4148 Messages postés samedi 8 septembre 2007Date d'inscription 13 décembre 2017 Dernière intervention - Modifié par cptpingu le 29/11/2016 à 10:54
0
Utile
Salut,

Le push_back est une fonction et non un attribut. Donc il faut faire:

    do
    {
        cout<<"Veuillez entrer votre note : "<<endl;
        double dValue;
        cin>>dValue;
        tableauNoteUserDynamique.push_back(dValue);
        cout<<"Avez vous d'autres note a enregistrer yes(y) no (n)"<<endl;
        cin>>yesNoUserNeed;
    }while(yesNoUserNeed=='y');



tu remarquera aussi que j'ai changé:

while(yesNoUserNeed=='y');


Ah aussi:

 char yesNoUserNeed(); 


est faux, pour crée un type char c'est seulement:
 char yesNoUserNeed; 



=> ajout des quotes.

Naga
Commenter la réponse de nagaD.scar
cptpingu 3768 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - Modifié par cptpingu le 29/11/2016 à 11:01
0
Utile
Bonjour.

Tout d'abord, merci de penser aux balises de codes et de faire attention à l'orthographe. Je t'ai corrigé tout cela dans ton message (mais ça sera à toi de le faire à l'avenir).

Plusieurs soucis:
  • Évite les using namespace, c'est très "sale". Voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
  • Ne pas confondre variable (exemple: int a) et fonction (exemple int a()).
  • Ne pas confondre variable (exemple toto) et chaîne de caractères (exemple: "toto"). toto est une variable, "toto" est une chaîne de caractères. Enfin, un simple caractère est sous la forme 'x'. Exemple: 'y', 'n', 'a', 'b', etc...
  • std::cin permet de lire une et une seule variable. Donc tu ne peux pas lui "donner" une fonction d'ajout d'éléments dans un tableau.
  • Les noms de variables ne sont pas super bien choisis. Il faut plutôt attribuer des noms en rapport avec la fonction ou la description d'une variable plutôt que de donner les valeurs qu'une variable peut prendre directement dans son nom. Exemple: yesNoUserNeed => bof. userChoice => mieux.
  • Je ne vais pas t'embrouiller avec cela pour l'instant, mais un std::cin doit se "protéger". Exemple: si on te demandes un nombre et que tu entres, "toto", ton programme va faire n'importe quoi. Pour l'instant, ignore ce problème. Il faut juste que tu en sois conscient, et tu verras plus tard comment résoudre ça (ce n'est pas primordial).


Est-ce que tu ne serais pas en train de brûler les étapes ? J'ai l'impression que tu ne maîtrises pas encore les types de variables, l'utilisation de variables et les boucles, et tu essaies déjà d'utiliser des tableaux...

Voici la bonne version du code:
#include <iostream>
#include <vector>

int main()
{
  std::vector<double> grades;
  char userChoice;

  do
  {
    double value = 0;
    std::cout << "Veuillez entrer votre note: ";
    std::cin >> value;
    grades.push_back(value);

    std::cout << "Avez-vous d'autres note à enregistrer ? yes(y)/no(n)" << std::endl;
    std::cin >> userChoice;
  }
  while (userChoice == 'y');

  return 0;
}


Le bouquin que tu utilises est correct pour ton niveau, mais il n'est pas terrible pour certaines mauvaises pratiques (notamment vis-à-vis du using namespace dégueux déclaré partout). Tu peux le conserver, mais en ayant à l'esprit qu'il n'y a malheureusement pas que des bonnes choses dedans :(.

Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Commenter la réponse de cptpingu
madhack 24 Messages postés lundi 28 novembre 2016Date d'inscription 27 avril 2017 Dernière intervention - 29 nov. 2016 à 22:42
0
Utile
Bonjour et merci pour vos réponses
En ce qui concerne le balisage désolé je ne savais pas mais je ferai de mon mieux à l'avenir pour ne pas oublier.
Pour le std:: je vais le mettre en application maintenant afin de me soumettre à cette rigueur dès le début de mon apprentissage même si les explications sont hors de ma portée pour l'instant.
n'ayant compris que le principe du

namespace std
{
// Code
int main()
{
// Code
return 0;
}
}


qui est surement l'essentiel.
Mon manque de maitrise est flagrant c'est certain je n'ai que mis en application sur quelques exercice les différentes notions vu jusque ici.
Et j'aime bien etoffer certain exercice en metant si possible l'ensemble des notions déja vu, car à force de répétition il y a assimilation.
J'ai un nouveau problème mais je vais l'éditer dans un autre poste
Celui ci étant résolu
Commenter la réponse de madhack

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.