Problème passage de C en C++

tino2503 Messages postés 4 Date d'inscription mardi 7 décembre 2010 Statut Membre Dernière intervention 27 novembre 2011 - 26 nov. 2011 à 15:39
tino2503 Messages postés 4 Date d'inscription mardi 7 décembre 2010 Statut Membre Dernière intervention 27 novembre 2011 - 27 nov. 2011 à 11:43
Bonjour, je suis novice en programmation. Je me met petit à petit au langage C++, j'avais déjà fais un peu de C avant. J'aurai quelques questions concernant un code que j'ai trouvé sur le net et sur lequel je me suis penché.
Tout d'abord, ce code est en C. J'ai besoin de la retranscrire en C++ pour le modifier personnellement. Le problème, c'est qu'il y a certaines choses que je ne sais pas faire. Par exemple :

"scanf ("%d", &choix);" //Donne quoi en C++ svp ?? Parce que "cin >> &choix;" ne marche pas...

Et quelle est le signification exacte de ce symbole "->", par exemple dans "liste->taille". Celà revient-il à faire en quelque sorte "liste.*taille" ??

Merci de votre aide, elle me serai vraiment utile :)

6 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
26 nov. 2011 à 18:32
Salut,

#include 
 
typedef struct
{
  int _data;
} MyStruct;

int main()
{
  MyStruct myStruct;
  MyStruct* lpMyStruct = &myStruct;
  myStruct._data = 1;
  (*lpMyStruct)._data = 2;
  lpMyStruct->_data = 3; // Equivalent à la ligne du dessus, mais aussi valable en C++

  std::cin >> lpMyStruct->_data;
  std::cout << myStruct._data << std::endl;
  return 0;
}
0
tino2503 Messages postés 4 Date d'inscription mardi 7 décembre 2010 Statut Membre Dernière intervention 27 novembre 2011
26 nov. 2011 à 18:51
Ok merci beaucoup !! Donc c'est une autre façon de manipuler un pointeur sur une structure.
J'aurai une dernière question, parce que je ne vois pas clairement comment je peux faire.
Je m'explique :
Le programme que je veux faire doit gérer un trafic de bus dans une ville. Enfin sans rentrer dans les détails ! Il doit juste recenser les stations et les lignes (RAPPEL : plusieurs stations sont situées sur une ligne, et une station peu être traversée par plusieurs lignes différentes). Ensuite, on veut pouvoir rajouter des stations, des lignes, en supprimer, afficher les lignes traversées par telle station, afficher les stations situées sur telle ligne, écrire le parcours pour aller de tel endroit à tel endroit, etc...

Je veux utiliser les listes chaînées pour faire cela afin de m'entraîner à les manipuler. En fait, je pense plutôt utiliser les listes doublements chaînées. Je voudrai savoir ce que vous pensez de ça, ou si vous avez une meilleur idée :


#include 

typedef struct StationListe{
  char *nom_station;
  struct StationListe *station_precedente;
  struct StationListe *station_suivante;
} Station;

typedef struct{
  Station *debut;
  Station *fin;
  int taille;
} Ligne;



Qu'en pensez-vous? Est-ce que je pars sur des bases qui me permettrons de faire ce que j'ai écris plus haut? Ou bien qu'avez-vous à proposer?

Merci d'avance pour votre aide !!
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
26 nov. 2011 à 20:53
Cela ne me paraît pas tout à fait approprié.

Avec ça, une station a une station suivante et une station précédente.
Si deux lignes se croisent à cette station, tu es embêté.
(A moins de faire deux stations pour en fait en représenter une seule, ce qui n'est pas forcément viable non plus).

Me semble qu'il faudrait un tableau de stations, et les lignes pourraient contenir un tableau de pointeurs sur ces stations.
Mais c'est aussi vrai que la liste chaînée paraît plus représentative de ce qu'est une ligne. Mais à ce moment là, il faudrait ajouter la notion d'"arrêt".

typedef struct StationListe{
  char *nom_station;
} Station;

typedef struct{
  Arret* suivant
  Arret* precedent;
  Station* station;
} Arret;

typedef struct{
  Arret *debut;
  Arret *fin;
  int taille;
} Ligne;


Cela dit, utiliser des structs, c'est un peu faire du C, là où en C++ on passerait par des classes.
0
tino2503 Messages postés 4 Date d'inscription mardi 7 décembre 2010 Statut Membre Dernière intervention 27 novembre 2011
26 nov. 2011 à 21:54
Merci beaucoup pour votre aide, c'est vrai que ce que je faisais était voué à l'échec. Est-ce que vous pouvez en une phrase m'expliquer comment tirer le meilleur partis de ces structures? C'est à dire ce que je pourrais faire avec? Quand vous parlez d'un tableau de stations, vous voulez plutôt dire une liste chaînée d'Arret c'est ça? Et la structure Ligne me servirait juste à naviguer parmi les Arrets n'est-ce pas? Mais comment mettre en relation une suite donnée d'Arrets avec une Ligne. Désolé pour les questions, mais je suis vraiment novice, et ce que j’entreprends est un réel défi pour moi.

Merci!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
27 nov. 2011 à 09:46
-> Huit stations stockées dans un tableau (Ou un Vector pour du C++). Redimensionner le tableau permet d'ajouter ou d'enlever des stations. Attention à modifier les arrêts en cas de suppression d'une station.

-> Deux lignes stockées dans un tableau. De même On peut redimensionner le tableau pour avoir plus de lignes.

-> La ligne verte a 4 arrêts, sur les stations 1, 2, 6 et 8.

-> La ligne bleue a 5 arrêts, sur les stations 3, 4, 5, 6 et 7.

-> Les deux lignes se croisent sur la station commune 6.

-> Les arrêts sont formés par des listes doublement chainées.

-> Les flèches représentent des pointeurs.
0
tino2503 Messages postés 4 Date d'inscription mardi 7 décembre 2010 Statut Membre Dernière intervention 27 novembre 2011
27 nov. 2011 à 11:43
Super! Merci!
Pouvez-vous juste me donner un exemple d'initialisation svp? ça m'aiderai beaucoup à comprendre exactement les relations entre.
Sinon, il ne devrait pas y avoir un autre pointeur pour "Ligne verte" qui pointe vers le dernier "Arrêt" ? idem pour "Ligne bleue" non?

Merci encore !!
0
Rejoignez-nous