begin process at 2012 02 13 00:22:49
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > CONVERTIR DES CHAR EN INT [DEV-C++]

CONVERTIR DES CHAR EN INT [DEV-C++]


 Information sur la source

Note :
2,25 / 10 - par 4 personnes
2,25 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Astuces Niveau :Débutant Date de création :18/06/2004 Vu :12 552

Auteur : victorcoasne

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note


 Description

Vous faite un cin.getline() ou un cin >> et pas de bol votre chiffre est dans une chaîne de caractère alors la solution est là !

Source

  • int charint(char chaineaconv[10+1])
  • {
  • int nbtotal=0;
  • for (int i=0;chaineaconv[i]!='\0';nbtotal++,i++){}
  • if (nbtotal>=10){cerr << "\nErreur dans la longueur de la cha\x8Cne !\n";return -1;}
  • int nbrtemp;int nbrconv=0;
  • for (int i=0;chaineaconv[i]!='\0';i++)
  • {
  • switch (chaineaconv[i])
  • {
  • case '0' : break;
  • case '1' : nbrtemp=1;break;
  • case '2' : nbrtemp=2;break;
  • case '3' : nbrtemp=3;break;
  • case '4' : nbrtemp=4;break;
  • case '5' : nbrtemp=5;break;
  • case '6' : nbrtemp=6;break;
  • case '7' : nbrtemp=7;break;
  • case '8' : nbrtemp=8;break;
  • case '9' : nbrtemp=9;break;
  • default : cerr << "\nErreur dans la cha\x8Cne !\n";return -1;
  • }
  • int nbtota=nbtotal;
  • nbtota-=i;
  • int nbtotat=nbtota;
  • nbtotat--;
  • nbtota=1;
  • for (int yi=0;yi<nbtotat;yi++){nbtota*=10;}
  • nbrtemp= nbrtemp*nbtota;
  • nbrconv+=nbrtemp;
  • }
  • return nbrconv;
  • }
int charint(char chaineaconv[10+1])
{
int nbtotal=0;
for (int i=0;chaineaconv[i]!='\0';nbtotal++,i++){}
if (nbtotal>=10){cerr << "\nErreur dans la longueur de la cha\x8Cne !\n";return -1;}
int nbrtemp;int nbrconv=0;
for (int i=0;chaineaconv[i]!='\0';i++)
{
    switch (chaineaconv[i])
    {
    case '0' : break;
    case '1' : nbrtemp=1;break;
    case '2' : nbrtemp=2;break;
    case '3' : nbrtemp=3;break;
    case '4' : nbrtemp=4;break;
    case '5' : nbrtemp=5;break;
    case '6' : nbrtemp=6;break;
    case '7' : nbrtemp=7;break;
    case '8' : nbrtemp=8;break;
    case '9' : nbrtemp=9;break;
    default : cerr << "\nErreur dans la cha\x8Cne !\n";return -1;
    } 
   int nbtota=nbtotal;
   nbtota-=i;
   int nbtotat=nbtota;
   nbtotat--;
   nbtota=1;
   for (int yi=0;yi<nbtotat;yi++){nbtota*=10;}
   nbrtemp= nbrtemp*nbtota;
   nbrconv+=nbrtemp;
}
return nbrconv;
}

 Conclusion

Il y a 10 chiffres maxi dans le nombre.

pour récupérer le nombre on appelle la fonction de la manière suivante :

int nombreentier=charint(nombreenlettre);

soit nombreentier le résultat

et pour vérifier si il y a eu erreur c'est

if (nombreentier==-1){cout << "Il y a eu une Erreur !!!";}


Voilà vous pouvez aussi visiter mon site si vous aimez les RPG ou si vous avez soif d'apprendre.


 Sources du même auteur

Source avec Zip Source avec une capture [DEV-C++] GESTION DU PORT PARALLÈLE
Source avec Zip Source avec une capture [DEV-C++] FENETRE TRANSPARENTE ET NON RECTANGULAIRE
Source avec Zip Source avec une capture HOOK CLAVIER AVEC DLL EN C++ [DEV-C++]
Source avec Zip Source avec une capture [SOCKET NON CONNECTE] ECHANGE DE FICHIERS (CLIENT/SERVEUR) [...
Source avec Zip Source avec une capture ENVOI/RÉCEPTION DE FICHIERS (CLIENT/SERVEUR) [DEV-C++]

 Sources de la même categorie

Source avec Zip SCHEDULER RR FIFO par yvesB87
Source avec Zip ALGORITHMES RÉCURSIFS VS ALGORITHMES ITÉRATIFS par yvesB87
Source avec Zip Source avec une capture C++ FORMAT D'IMAGE AVEC QT par pop70
Source avec une capture EXEMPLE DE POINTEURS DE FONCTION par pop70
Source avec Zip Source avec une capture [C++] CLASS REGISTER par Miwik

Commentaires et avis

Commentaire de BlackGoddess le 18/06/2004 23:23:41

int i;
cin &gt;&gt; i;
ou est le problème ?

sinon il existe atoi en C (je sais pas si c'est standard)

et std::istringstream en C++ qui est portable

#include &lt;sstream&gt;

int main()
{
  std::istringstream iss("123);
  int i;
  iss &gt;&gt; i;
  cout &lt;&lt; i &lt;&lt; endl;
}

Commentaire de djl le 18/06/2004 23:28:42

ca sert a koi??

int i;
cin&gt;&gt;i; ou est le probleme ? et surtout ta pas l'impression de reinventer la roue ? ca existe en c standard et en c++ standard...

et ca,
for (int i=0;chaineaconv[i]!='\0';nbtotal++,i++){}

tu pouvais ecrire
while( chaineaconv[nbtotal++] ); ?

Commentaire de djl le 18/06/2004 23:30:39

BlackGoddess &gt; oui atoi c'est pas standard, mais c'est present sur de nombreuses implementation, mais ya sprintf qui est standard...

Commentaire de BlackGoddess le 19/06/2004 02:20:25

sscanf plutot dans son cas

Commentaire de victorcoasne le 19/06/2004 10:28:57

L'intérêt est si on a envie de faire QUE des cin.getline(); .

Mais aussi pour pas être embêter qd on fait cin &gt;&gt; puis cin.getline(); de plus dans la saisie cin &gt;&gt; tant que le nombre est pas bon il va à la ligne alors que si on a une interface tout juste calculée ça ne va plus.

Tandis qu'avec cin.getline() et un gotoxy(); on pourrais revenir à la même position.

Si vous dîtes que atoi() fait la même chose avec les renvoie d'erreur ect ma fonction ne sert plus à rien !

Commentaire de djl le 19/06/2004 10:57:42

BlackGoddess &gt; enfait atoi c'est bien standard, c'est itoa qui ne l'est pas

victorcoasne &gt; en c++ tu a les stringstream, en c sscanf et atoi, mais prefer atoi car c'est plus performant

pour le code retour, comment tu fait si l'entier à convertir est -1 ?

medite sur ce code condensé style k&r

int atoi(char s[])
{
int i, n;
n = 0;
for (i = 0; s[i] &gt;= '0' && s[i] &lt;= '9'; ++i)
n = 10 * n + (s[i] - '0');
return n;
}

Commentaire de victorcoasne le 19/06/2004 11:06:13

Tout simplement il dit erreur car il ne gère pas les négatif !

Commentaire de BlackGoddess le 19/06/2004 12:15:50

gotoxy() est pas standard :o

avec istringstream tu peux savoir s'il y a une erreur avec istringstream::good je crois.

Commentaire de victorcoasne le 19/06/2004 12:44:36

Remarquez : Le but c'est pas seulement la fonction mais surtout d'aider des débutants à comprendre aussi des choses

Commentaire de magic_Nono le 13/09/2004 19:35:22

sscanf & sprinf suffisent svt

L'idée de base n'est pas mauvaise,
mais là je crois que c'est du std de chez std

++

Commentaire de victorcoasne le 13/09/2004 19:37:51

c'est pas du int en char mais du char en int !

Commentaire de djl le 13/09/2004 19:48:39

de toutes facon on l'avais dit, si tu veux faire que des getline, parse ta string dans un istringstream, quoi de plus simple?

Commentaire de Kyokono le 02/04/2008 19:20:24

Hum, voilà ma version:

int convctoi(char s[10]){
        int i=0;
        int num=0;
        bool negatif=0;

        if((s[i]-'0')==(-3)){
                i=1;
                negatif=1;
        }
                while(s[i]){

                        num=(num*10)+(s[i]-'0');
                        i++;
                }

        if(negatif){
                num*=(-1);
        }

        return num;
}

Simple, cours et prend les négatifs

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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 : 1,279 sec (4)

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