Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2416 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  J'ai déjà honte tellement ca doit être facile....

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

J'ai déjà honte tellement ca doit être facile....

n°330226
gooopil
pfiew
Posté le 12-03-2003 à 09:54:38  profilanswer
 

Hello !
 
Voila un code tout simple qui devrait me permettre de convertir un char * en int (de buffer vers result). Mais le truc a un comportement complètement abérant...C'est surement un truc tout con, mais la je vois pas du tout...
 

Code :
  1. #include <windows.h>    // DWORD, BOOL, Registry API's
  2. #include <stdio.h>
  3. #include <iostream.h>
  4. int main(int argc, char* argv[])
  5. {
  6. char buffer[16]="120a  3 456789";;
  7. cout <<buffer<<endl;;
  8.  int i,nbc,factor,result,j;
  9.  j=0;
  10.  factor=1;
  11.  result=0;
  12.  nbc=0;
  13.  for (i=0;i<15;i++)
  14.  {
  15.   if ( (strcmp (&buffer[i],"0" ) >= 0 ) && (strcmp (&buffer[i],"9" ) <= 0 ))
  16.   {
  17.    nbc++;
  18.   }
  19.  }
  20.  cout<<"Nombre digits : "<<nbc;
  21.  for (i=0;i<nbc-1;i++)
  22.  {
  23.   factor*=10;
  24.  }
  25.  cout<<endl<<"Facteur : "<<factor<<endl;
  26.  char c;
  27.  for (i=0;i<15;i++)
  28.  {
  29.   if ( (strcmp (&buffer[i],"0" ) >= 0 ) && (strcmp (&buffer[i],"9" ) <= 0 ))
  30.   {
  31.    int digit=1;
  32.    if (strcmp(&buffer[i],"0" ) == 0)
  33.    {
  34.     digit=0;
  35.    }
  36.    if (strcmp(&buffer[i],"1" ) == 0)digit=1;
  37.    if (strcmp(&buffer[i],"2" ) == 0)digit=2;
  38.    if (strcmp(&buffer[i],"3" ) == 0)digit=3;
  39.    if (strcmp(&buffer[i],"4" ) == 0)digit=4;
  40.    if (strcmp(&buffer[i],"5" ) == 0)digit=5;
  41.    if (strcmp(&buffer[i],"6" ) == 0)digit=6;
  42.    if (strcmp(&buffer[i],"7" ) == 0)digit=7;
  43.    if (strcmp(&buffer[i],"8" ) == 0)digit=8;
  44.    if (strcmp(&buffer[i],"9" ) == 0)digit=9;
  45.    //else cout<<"Err";
  46.    cout <<endl<<"Buffer : "<<buffer[i]<<" et Digit : "<<digit<<"     Facteur : "<<factor;
  47.    result+=digit*factor;
  48.    factor/=10;
  49.   }
  50.  }
  51.  cout<<endl<<endl<<"Resultat : "<<result;
  52.  char t[3]=" 2";
  53.  if (strcmp(&buffer[1],"2" )==0)cout<<endl<<"CA alors"<<endl;
  54.  cout<<endl<<buffer;
  55. }

mood
Publicité
Posté le 12-03-2003 à 09:54:38  profilanswer
 

n°330229
polo021
Posté le 12-03-2003 à 10:02:12  profilanswer
 

&buffer[i]
c'est pas ca le probleme?
=> buffer[i]

n°330230
gooopil
pfiew
Posté le 12-03-2003 à 10:04:13  profilanswer
 

Ben le prototype de strcmp donne deux const char * en param...donc non : 'strcmp' : cannot convert parameter 1 from 'char' to 'const char *'
 
EDIT :  
 
Je viens d'essayer d'ajouter  

Code :
  1. char t[3]=" 2";
  2. if (strcmp(&t[1],"2" )==0)cout<<endl<<"CA MARCHE A LA FIN SEULEMENT !!!!!!"<<endl;


 
Et ben ca ca marche...Pourquoi pas les autres, sauf le dernier caractère...A vous de me le dire


Message édité par gooopil le 12-03-2003 à 10:11:05
n°330241
polo021
Posté le 12-03-2003 à 10:27:26  profilanswer
 

Gooopil a écrit :

 

Code :
  1. char t[3]=" 2";
  2. if (strcmp(&t[1],"2" )==0)cout<<endl<<"CA MARCHE A LA FIN SEULEMENT !!!!!!"<<endl;


 
Et ben ca ca marche...Pourquoi pas les autres, sauf le dernier caractère...A vous de me le dire


 
et

Code :
  1. char t[3]=" 2";
  2. if (strcmp(&t[0]," " )==0)cout<<endl<<"CA MARCHE A LA FIN SEULEMENT !!!!!!"<<endl;


 
ca va pas ca!???

n°330245
gooopil
pfiew
Posté le 12-03-2003 à 10:31:00  profilanswer
 

Ah ben non, ca marche po ca (strcmp(&t[0]," " )==0)....Arf je comprend pas....
 
 
Je vous laisse trouver la solution pendant que je vais en cours. Y'a intérêt à ce que ce soit résolu à midi c bien compris ?  ;)


Message édité par gooopil le 12-03-2003 à 10:34:45
n°330287
BifaceMcLe​OD
The HighGlandeur
Posté le 12-03-2003 à 11:14:22  profilanswer
 

Il y a surtout un très gros boulot de réécriture pour que ce code soit plus simple et plus lisible.
 
D'abord pour comparer 2 caractères, on n'utilise pas strcmp (qui, je rappelle permet de comparer 2 chaines de caractères complètes) : on compare les caractères, tout simplement !
Donc n'écris pas

Code :
  1. if ( (strcmp (&buffer[i],"0" ) >= 0 ) && (strcmp (&buffer[i],"9" ) <= 0 ))

mais

Code :
  1. if (buffer[i] >= '0'  &&  buffer[i] <= '9')

. Plus simple, non ?
 
Ensuite, pour convertir le caractère en chiffre, la méthode la plus simple est d'écrire

Code :
  1. digit = (int) buffer[i] - (int) '0';

au lieu de ta cascade de ifs.
La seule chose que suppose ce code est que le codage des chiffres est contigu dans la table de caractères.
 
Enfin, deux des trois boucles sont inutiles dans ton main. Tu peux convertir ta chaine en entier avec une seule boucle, comme suit :

Code :
  1. const int   maxLen      = 15;
  2. const char  endOfString = '\0';
  3. int   number = 0;
  4. char  digit  = buffer[0];
  5. if (digit != endOfString) {
  6.   int   i = 0;
  7.   do {
  8.     if (digit >= '0'  &&  digit <= '9') {
  9.       number = 10 * number + (digit - '0');
  10.     }
  11.     else {
  12.       // Erreur. Quitter la boucle.
  13.       break;
  14.     }
  15.     i++;
  16.     digit = buffer[i];
  17.   } while (i < maxLen  ||  digit != endOfString);
  18. }


Message édité par BifaceMcLeOD le 12-03-2003 à 11:17:05
n°330334
polo021
Posté le 12-03-2003 à 11:53:11  profilanswer
 

j'en connais un qui va etre content

n°330374
gooopil
pfiew
Posté le 12-03-2003 à 12:21:25  profilanswer
 

Hehe moi aussi j'en connais un qui est content. Merci pour l'aide, je vais essayer tout ca :)
 
Ca faisait plus de deux ans que j'avais pas touché au C++ et ben c laborieux ;)
 
Edit : Ayé ca marche :D


Message édité par gooopil le 12-03-2003 à 12:42:20

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  J'ai déjà honte tellement ca doit être facile....

 

Sujets relatifs
Question qui doit êter facile à répondre.. j'espère[JS] petite modification de script.. facile mais je sais pas faire :'(
[PHP] Upload [Récupération facile du type de fichier]redirection en PHP, question facile ...
[Access] Besoin d'aide Urgente : Rapide et facile pour un connaisseurVBA Access Facile mais pas pour moi
question facile sur .writeau risque de me taper la honte...
deux sujets assez facile pour vous je penseProgramme facile style Borland Turbo C++ Lite
Plus de sujets relatifs à : J'ai déjà honte tellement ca doit être facile....


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)