Tableau de caractère et $...

Tableau de caractère et $... - C++ - Programmation

Marsh Posté le 13-11-2010 à 14:17:50    

Bonjour.
 
Dans le cadre d'un travail pour l'école, je dois entrer un texte dans un tableau de caractère via la fonction cin.get().
J'ai donc également une valeur STOP='$' pour sortir de la boucle (ce qui signifie que le texte est fini).
 
Mais le problème c'est que lorsque je rentre un texte quelqconque du genre "Salut!$", je me retrouve après avec un "Salut!$"²". En fait il rajoute des petits caractères au hasard selon le texte...
 

Spoiler :

#include <iostream>
 
using namespace std;
 
int main()
{const char STOP='$';
const int MAX=500 ;
char t1[MAX], c;
int ind=0;
 
    cout << "Entrez votre texte." << endl;
 
        do {
    cin.get(c);
    t1[ind]=c;
    ind=ind++;
    }
    while (c!=STOP && ind<MAX) ;
 
    cout << t1;
 
 return 0;
}


 
Merci de votre aide.  :jap:

Reply

Marsh Posté le 13-11-2010 à 14:17:50   

Reply

Marsh Posté le 13-11-2010 à 14:23:38    

Bonjour,
pour que cout l'affiche correctement, il faut que t1 soit une chaine à zero terminal, c'est a dire que la fin de la chaine est marquée par '\0'
donc après ton while tu ecris un " t1[ind]='\0'; " et cela devrait fonctionner.
Edit: d'ailleurs je ne crois pas que le caractère $ doit apparaitre dans ta chaine finale (cout << t1) car il marque la fin de la saisie uniquement.
je changerais donc en:

Code :
  1. ...
  2.      cin.get(c);
  3.      while(c!=STOP && ind<MAX-1)
  4.      {
  5.          t1[ind]=c;
  6.          ind=ind++;
  7.      }
  8.      t1[ind]='\0';
  9. ...


Message édité par breizhbugs le 13-11-2010 à 14:27:50

---------------
Seul Google le sait...
Reply

Marsh Posté le 13-11-2010 à 14:25:23    

une chaîne de caractère se termine par la caractère '\0', donc il faut que tu rajoutes la fin de ta boucle: "t1[ind] = 0;".
 

Reply

Marsh Posté le 13-11-2010 à 14:38:24    

Ok merci, ça a l'air de bien marcher. ^^
 
Sinon pourriez vous m'expliquer la différence entre :
cin.get(c);
cin >> c;
 
Merci.

Reply

Sujets relatifs:

Leave a Replay

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