begin process at 2010 03 18 12:07:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

Probléme avec les chaines de caractére


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Probléme avec les chaines de caractére

mercredi 24 mai 2006 à 14:18:10 | Probléme avec les chaines de caractére

Mareck666

   Salut, Voila j'ai un gros probléme, en faite je voudrais réaliser un chatterbot en c, du genre on rentre une question dans la console et le bot nous répond, mais voila ya un probléme, lorsque je fait une condition sur une chaine entrer au clavier, soit sa quitte soit sa bug
Voici un exemple du code :

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main()
{
       char var;
       printf("Bienvenue dans le Bots déxemple");
       scanf(" %s", &var);

      if (var == "comment tu tapelle par exemple")
      {
           printf("\nJe mapelle bot 2");
           main()
        }
      else if (var == "comment tu ...")
      {
          printf("...");
        main();
}
        [...]
     return 0;
}
mercredi 24 mai 2006 à 14:24:19 | Re : Probléme avec les chaines de caractére

nightlord666

Membre Club
Réponse acceptée !
IL NE FAUT JAMAIS UTILISER == AVEC DES CHAINES DE CARACTERES !!! == va en fait comparer l'adresse de ta chaine avec l'adresse de la chaine constante indiquée. Solution: Utilise strcmp(var, "comment tu tapelle par exemple"). Si strcmp renvoie 0, les chaines sont égales, sinon elles sont différentes.
mercredi 24 mai 2006 à 14:37:00 | Re : Probléme avec les chaines de caractére

laurent1024

De plus       
char var;
scanf(" %s", &var);
c'est tres dangeureux, tu stocke une chaine de carcatere dans une seul char !!!!!

faut au minimim declarer un tableau (char var[500];  par exemple) pour avoir une chaine de carcartere.
mercredi 24 mai 2006 à 14:55:31 | Re : Probléme avec les chaines de caractére

nightlord666

Membre Club
C'est vrai que le problème vient en plus de cela: tu va stocker un tableau de caractères dans un caractère, ce qui va donner un message d'erreur de windows du type la mémoire ne peut pas être "write", car scanf va utiliser un emplacement mémoire non valide. Solution: char var[500]; //Tableau de 500 caractères
mercredi 24 mai 2006 à 14:56:57 | Re : Probléme avec les chaines de caractére

Mareck666

Merci nightlord666 et laurent1024 pour m'avoir apporter la réponce
mercredi 24 mai 2006 à 15:02:36 | Re : Probléme avec les chaines de caractére

nightlord666

Membre Club
Réponse acceptée !
Par contre je trouve ça très mauvais de faire un main récursif, d'ailleurs je n'avais jamais vu ça ^^ Utilise plutôt while, break, continue, goto(mais très peu), car sinon au bout d'un certain nombre de commandes, la pile va être surchargée --> erreur (essaye si tu veut, j'en suis sur). int main() { char done = false; while(!done) { char var[500]; printf("Bienvenue dans le Bots déxemple"); scanf(" %s", &var); if (strcmp(var, "comment tu tapelle par exemple") == 0) { printf("\nJe mapelle bot 2"); continue; } else if (strcmp(var, "comment tu ...") == 0) { printf("..."); continue; } //Exemple de break else if(strcmp(var, "quitter") == 0) { break; //On quitte la boucle } } return 0; }
mercredi 24 mai 2006 à 15:04:17 | Re : Probléme avec les chaines de caractére

nightlord666

Membre Club
En fait on n'aurait même pas besoin du done, mais c'est pour pouvoir quitter la boucle en faisant tout simplement done = true, et en executant quand même le code situé après les else if.
mercredi 24 mai 2006 à 15:11:14 | Re : Probléme avec les chaines de caractére

Mareck666

Eh bien je ne savais pas que tous sa existé, quand je pense que sa fait 3 ou 4 mois que j'essaye de trouver la solution a ce probléme alors que la réponce se situer dans la librairie "strin.h", ce qui est évident ...
mercredi 24 mai 2006 à 15:17:15 | Re : Probléme avec les chaines de caractére

nightlord666

Membre Club
Si tout le monde dit que le C++ est un des langages le plus riche(peut-être même LE plus riche), ce n'est pas pour rien. Dans string.h, il y a aussi d'autres fonctions qui peuvent être utile dans ton cas comme: strcat(char* src, const char* dest) pou concaténer des chaines. strstr(const char* string, const char* searchstring) qui recherche searchstring dans string (si pas trouvé, renvoie NULL, sinon renvoie la sous-chaine(substring en anglais) qui commence par searchstring). Pour l'explication de toutes ces fonctions : MSDN (je ne sait pas si elles sont dans la version en ligne, mais sur mon VC++ 6.0 elles y sont) ou des tutoriaux en ligne.
mercredi 24 mai 2006 à 15:21:03 | Re : Probléme avec les chaines de caractére

nightlord666

Membre Club
Pour les continue, break : BOUCLE <-----\ CODE | continue -----/ CODE break -----\ FIN DU WHILE | CODE <-----/

1 2

Cette discussion est classée dans : printf, var, include, probléme, main


Répondre à ce message

Sujets en rapport avec ce message

Probleme avec Dev c++ (débutant) [ par MATHIS49 ] Bonjour à tous ! Bon voila j'expose mon problème, j'ai acheté un bouquin pour apprendre le C ( le langage C par Peter Aitken et Bradley L.Lones éditi partage de variable entre plusieurs fichiers [ par Spiffou ] salut à tous,j'ai un ptit pb sur vc6:j'ai un prog comportant plusieurs fichiers:main.cpp // code du mainfonction.cpp // code des fonc C++ VS Mysql [ par ours_aquatique ] Bonjour ,Aprés une semaine de recherche infructueuse , j'ai toujours le probleme suivant:je compile sous devC++ j utilise Mysql (V4.et des poussieres) besoin d'aide : TP école d'ingénieur [ par arbomont ] Voici le TP que je dois rendre, et je coince sur un petit détail, pourriez vous m'aider ?Il s'agit d'un programme de communication (un chat) utilisant Les chaines de caractère et biens d'autres problemes. Si vous voulez aider un nouveau ds l'art du C vous etes servi!!! [ par Lavieillefolle ] Voilà voilà j'ai écris un code, enfin g tanter d'écrire et comme vous allez le constater je ne possede aucune experience. Alors si vous pourriez résou SDL: La commande printf(""); n'affche rien! [ par yugiohjcj ] Bonjour,voici la source de mon programme:#include #include #include #define true 1int main(int argc, char *argv[]){ printf("\a"); if ( SDL_Init g++ & openGL [ par EricLeRouge ] j'ai un gros soucis de compilation de fichiers en c++ avec openGL.En C tout se passe tres bien, mais en C++, rien ne va plus, expliquez moi pk voici l Separer une chaine en sous chaine [ par firemax ] Bonjour Je me posais une question , j'aimerais diviser une chaine en sous chaine pour pouvoir ensuite les trier par longueur de chaine de caractere prob tableaux [ par ben3020 ] Bonjour, je suis actuellement en train de faire un challenge et j'aimerai savoir les erreurs de mon code ( je ne veux pas de reponses juste des consei Include "je_comprend_pas_grand_chose.h" [ par neodelphi ] Bonjour tout le monde... C'est la première fois que je post un message ici, arf g le trac lol Bon je viend de me mettre au C++ pour me prog un jeu en


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales