problème saisi chaine de caractère

problème saisi chaine de caractère - C++ - Programmation

Marsh Posté le 01-12-2013 à 10:54:46    

Bonjours à tous j'ai un problème sur un exercice, je doit saisir des villes les triés au moment de la saisir puis rendre un tableau avec toutes les villes sans les occurences possible puis un autre tableau avec le nombre d'occurence de chaque ville.
Donc pour le moment j'ai toutes les fonction dont j'ai besoin mais je bloque sur la fonction principales qui est de saisir les villes et les enregistré dans un tableau...
voilà ce que j'ai fait pour la fonction de saisi sachant que j'air recommencé une bonne 10ène de fois et que la je désespère...
je rapelle que pour cette fonction je ne veut que saisir des villes et retourné le tableau avec toute les villes saisis.

Code :
  1. char** pResultat=(char**)malloc(sizeof(char*)*(20));// 20 ville différentes au maximum
  2. char* laVille;
  3. scanf("%s",laVille);
  4. for (int i=0;i<20;i++){
  5.  scanf("%s",laVille);
  6.  pResultat[i]=laVille;
  7.  if(laVille=="." ) break;// lorsque que l'utilisateur saisi un point on arrête la saisi
  8. }
  9. return pResultat;
  10. }


Message édité par shlayers le 01-12-2013 à 12:31:48
Reply

Marsh Posté le 01-12-2013 à 10:54:46   

Reply

Marsh Posté le 01-12-2013 à 11:55:15    

Bonjour !
 
Le bloc ci-dessous est incorrect :  

Code :
  1. char* laVille;
  2. scanf("%s",laVille);


 
En effet, vous déclarez un pointeur qui pointe sur on ne sait pas quoi et vous vous en servez pour stocker le résultat de la saisie.
 
Vous devez allouer votre pointeur avant de saisir.
 
Dans le cas qui nous intéresse, le mieux est de faire une double allocation de pResultat :

Code :
  1. char** pResultat=(char**)malloc(sizeof(char*)*(20));
  2.    for (int i=0;i<20;i++)
  3.    {
  4.       pResultat[i]=(char*)malloc(sizeof(char)*(80));
  5.    }


 
(En prenant assez large au niveau de la taille pour la deuxième allocation pour ne pas déborder ...), puis vous saisissez directement dans pResultat dans la boucle en faisant  

Code :
  1. for (int i=0;i<20;i++)
  2. {
  3.   scanf("%s",pResultat[i]);
  4.   ...
  5. }


 
De plus, votre "if (laVille == "." )" ne retournera jamais vrai, il vous faut faire "if (strcmp(laVille, "." ) == 0)"
 
Bon, maintenant, tout ceci n'est valable que si vous devez faire du C, si vous pouvez faire du C++ (comme la rubrique dans laquelle vous avez posté semble l'indiquer ;) ), vous utilisez std::string et std::cin et c'est BEAUCOUP plus simple :)

Reply

Marsh Posté le 01-12-2013 à 12:13:20    

un Grand merci à toi, enfait mon prof nous fait travailler dans un environnement c++ mais apparement il nous apprend pas toute les possibilité du c++ donc la prochaine fois je posterais dans la section c en tous cas merci de m'avoir montré mes erreurs vraiment bête.... Maintenant j'ai un  problème sur l'appel de la fonction  

Code :
  1. void main()
  2. {
  3. char** leTabVille=Saisir();
  4. for (int i=0;i<20;i++)
  5.  printf("%s",leTabVille[i]);
  6. getch();
  7. }


le printf ne m'affiche pas bien le tableau il m'affiche plein de hiéroglyphe...


Message édité par shlayers le 01-12-2013 à 12:31:08
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed