Gets

Signaler
Messages postés
1
Date d'inscription
vendredi 19 septembre 2008
Statut
Membre
Dernière intervention
19 septembre 2008
-
Messages postés
589
Date d'inscription
lundi 25 août 2003
Statut
Membre
Dernière intervention
18 juillet 2010
-
Bonjour,
Etant étudiant notre prof nous a demandé de créer un programme qui doit dire le plus grand mot d'une chaine de caractère saisie avec gets. Le seul problème c'est que quand je met :
 gets(TabCar);
    cout << " La phrase est  : ";
    while(*TabCar!= '\0')
    {
                cout<<TabCar;
    }
Il met met des millions de fois la chaine saisie bien sur sans s'arreter ... C'est peu-etre une question bete mais je ne trouve pas de réponse concrete avec la fonction que je connais très peu et comme la prof nous .
Voici tout mon programme au cas ou cela serait-utile :
#include
#include
#include <conio.h>
#include <math.h>
#include <string.h>
using namespace std ;

void extraire(int position, char Mot[30],int &CpteurCar, char TabCar[30])
{
     int j,x;
     j=0;
     x=position-CpteurCar;
     while(j!=position)
     {
                        Mot[j]=TabCar[x];
                        j++;
                        x++;
     }
}

void compter(char TabCar[30], char Mot[30])
{
     int CpteurCar,PlusGrand,i,position;
     i=0;
     PlusGrand=0;
     while(i<=30)
     {
                 CpteurCar=0;
                 while(TabCar[i]!=' ')
                 {
                                     CpteurCar=CpteurCar+1;
                                     i=i+1;
                 }
                 if(CpteurCar>PlusGrand)
                 {
                                        PlusGrand=CpteurCar;
                                        position=i;
                 }
                 i=i+1;
                 i=i+1;
               
     }
     cout << " Le mot le plus grand fait " << PlusGrand << " lettre(s) ";
     extraire(position,Mot,CpteurCar,TabCar);
}

int main()
{
    char *TabCar;
    TabCar=new char;
    char Mot[30];
    int i,CpteurCar;
    i=0;
    cout << " .: Le Mot Le Plus Long :. \n\n\n\n" ;
    cout << " Veuillez saisir une chaine de caracteres (maximun 30 caracteres): \n\n" ;
    gets(TabCar);
    cout << " La phrase est  : ";
    while(*TabCar!= '\0')
    {
                cout<<TabCar;
    }
    cout << " \n\n ";
    system("pause");
    compter(TabCar,Mot);
    cout << "\n\n Le mot le plus long est : " ;
    while(i<=30)
    {
                       cout << Mot[i];
                       i++;
    }
    cout << "\n\n\n\n .: Fin du programme :. " ;
    getch();
    return(0);
   
}

Merci de vos réponses.

Titiii25
A voir également:

1 réponse

Messages postés
589
Date d'inscription
lundi 25 août 2003
Statut
Membre
Dernière intervention
18 juillet 2010
1
Je pense que le probleme vient de la façon dont tu affiches ta chaine de caractere :

while(*TabCar!= '\0')
    {
                cout<<TabCar;
    }

Si tu veux absolument une boucle tu peux faire ca :

while(i < 30 && TabCar[i]!= '\0')
    {
                cout<<TabCar[i];
                i++;
    }

Sinon au plus simple : cout << TabCar;

J'ajouterai n'utilise pas gets car elle permet le buffer overflow ce qui est dangereux utilise plutot fget(TabCar,30,stdin);Et aussi quand tu fais TabCar new char; tu dimensionnes un tableau de un caractere donc plutot TabCar new char[30]; qui dimensionne un tableau de 30 char de 0 à 29.


J'espere avoir était assez clair et ne pas avoir dis de sotise.





<hr />

www.e-fitz.com

Encore plus de source et de tutoriels.