Accueil > Forum > > > > fonction atoi, débutant, c++,help
fonction atoi, débutant, c++,help
mercredi 28 novembre 2007 à 01:00:14 |
fonction atoi, débutant, c++,help

oli1207
|
re bonjour voila j'ai un problème j'arrive pas a faire marcher la fonction atoi je sais plus quoi faire j'ai essayé ce que je savais mais rien y fait il veut pas passer cette condition quoi que ce soit que tu rentre qui peut m'aider svp ? if ((97 - (atoi(insee_car) % 97)) != insee_key) { printf("saisie3 éronnée \n"); }
else
{
valid = true ; }
|
|
mercredi 28 novembre 2007 à 02:07:34 |
Re : fonction atoi, débutant, c++,help

SAKingdom
|
Hmmm insee_car c'est quoi ? Si il s'agit bien d'un pointeur char (char*), le problème vient de ton calcule. Si il s'agit d'autre chose, atoi ne convertie que des char*
D'après le nom, je présuppose que, si il ne s'agit pas d'un pointeur char, il doit s'agir d'un char. Si c'est le cas, inutile de passer par une fonction. Suffis de soustraire 0x30 (le caractère '0')
char c = '5'; int i = c-'0';
i contiendra 5
C++ (@++)
|
|
mercredi 28 novembre 2007 à 02:52:17 |
Re : fonction atoi, débutant, c++,help

SAKingdom
|
Bon ici, quand je parle de pointeur char (char*), je veux parler d'une chaine de caractères. C++ (@++)
|
|
mercredi 28 novembre 2007 à 18:01:56 |
Re : fonction atoi, débutant, c++,help

oli1207
|
ok merci pour la réponse je vais vous donner tout l'algo comme ça tout sera claire$ #include "stdafx.h"#include <stdlib.h>#include <stdio.h>#define MAXI1 15// prototypage bool test(int an);void sschaine(char insee_string[MAXI1],int inddeb,int long1 , char masouschaine[MAXI1]);int longueur(char machaine[MAXI1]);void main (void){ bool valid = false; //délclaration des variablebool bissextile;char insee_car[MAXI1]="";char insee_string[MAXI1]="";char masouschaine[MAXI1]="";char masouschaine1[MAXI1]="";char masouschaine2[MAXI1]="";int insee_key;int annee;int cle_nb;int insee_nb;do //boucle{ printf ( "Saisir votre numéro Insee \n");scanf( " %s",&insee_string, '\0');sschaine(insee_string,0,1,masouschaine); sschaine(insee_string,0,13,insee_car); sschaine(insee_string,14,2,masouschaine2); insee_key = atoi(masouschaine2); if ( longueur(insee_string) != MAXI1 ) //vérification de la longueur du numéro{ printf( "saisie1 éronnée \n");} else{ if (( atoi(masouschaine) != 1) && ( atoi(masouschaine) != 2) ) //différent de 1 ou 2 (premier chiffre du numéro pour vérifier fille ou garçon{ printf( "saisie2 éronnée \n"); } else{ int cle_nb=atoi(insee_key);int insee_nb=atoi(insee_car);if ((97-(insee_nb%97))!= cle_nb) //opération pour déterminer si l'année est bissextile ou non{ printf( "saisie3 éronnée \n");} else{ valid = true ;} } } } while (valid == false);sschaine(insee_string,1,2,masouschaine); annee = atoi(masouschaine); annee = annee + 1900; bissextile = test(annee); sschaine(insee_string,0,1,masouschaine); if (atoi(masouschaine) == 1){ if (bissextile == true){ printf( "Monsieur vous êtes né une année bissextile \n");} else{ printf( "Monsieur vous êtes né une année non bissextile \n");} } else{ if (bissextile == true ) { printf( "Madamme vous êtes née une année bissextile \n");} else{ printf( "Madamme vous êtes née une année non bissextile \n");} } system( "pause");} // Fin du main bool test(int an) //test de l'année bisextile{ bool bissext = false;if ((an % 4 )!= 0){ bissext = false ;} else{ if ((an % 100 )!= 0){ bissext = true ;} else{ if ((an % 400 )!= 0){ bissext = false ;} else{ bissext = true ;} } } return bissext; } // Fin de la fonction test()void sschaine(char insee_string[MAXI1],int inddeb,int long1 , char masouschaine[MAXI1]) //fonction sschaine( ){ int j;int indfin;int i;indfin = inddeb + long1 ; j = 0; for (i = inddeb; i < indfin ; i++){ masouschaine[j] = insee_string[i]; j++ ; } masouschaine[j] = '\0';} // fin de la fonction sschaine()int longueur(char machaine[MAXI1]) //fonction longueur pour vérifier la longueur de la chaine{ int i = 0;while (machaine[i] != '\0'){ i = i + 1; } return i;}
voila c'est ce qui ya en gras mais si vous voyez des erreurs vous pouvez me dire lesquelles elles sont svp ? merci je ne crois pas qu'il y en ai mais on ne sait jamais
|
|
mercredi 28 novembre 2007 à 21:57:53 |
Re : fonction atoi, débutant, c++,help

BruNews
|
Faudrait déjà être cohérent:
#define MAXI1 15 char insee_string[MAXI1]; if(longueur(insee_string) != MAXI1) { printf("saisie1 éronnée \n"); }
JAMAIS strlen d'un char[15] NE DOIT REPONDRE 15 mais toujours < 15 sinon c'est qu'on a lu hors du buffer.
int test(int an) { return ((an & 3) == 0 && ((an % 100) != 0 || (an % 400) == 0)); }
int longueur(char *machaine) { char *c = machaine; while(*c) c++; return (c - machaine); }
void sschaine(...) est une vraie source de plantage, forts risques de lecture et écriture hors buffer.
ciao... BruNews, MVP VC++
|
|
mercredi 28 novembre 2007 à 22:11:53 |
Re : fonction atoi, débutant, c++,help

BruNews
|
Je remets ton code présenté convenablement. Quand on cherche des réponses, on fait en sorte de ne pas rebuter ceux qui seraient disposés à les apporter. Tu repartiras d'un copier coller de ce qui est dessous.
#include <stdafx.h> #include <stdlib.h> #include <stdio.h> #define MAXI1 15
int test(int an); void sschaine(char insee_string[MAXI1],int inddeb,int long1 , char masouschaine[MAXI1]); int longueur(char machaine[MAXI1]);
void main (void) { int valid = 0; int bissextile; char insee_car[MAXI1]; char insee_string[MAXI1]; char masouschaine[MAXI1]; char masouschaine1[MAXI1]; char masouschaine2[MAXI1]; int insee_key; int annee; int cle_nb; int insee_nb; do { printf("Saisir votre numéro Insee \n"); scanf(" %s",&insee_string, '\0'); sschaine(insee_string,0,1, masouschaine); sschaine(insee_string,0,13, insee_car); sschaine(insee_string,14,2, masouschaine2); insee_key = atoi(masouschaine2); if(longueur(insee_string) != MAXI1) { printf("saisie1 éronnée \n"); } else { if((atoi(masouschaine) != 1) && ( atoi(masouschaine) != 2) ) { //différent de 1 ou 2 (premier chiffre du numéro pour vérifier fille ou garçon printf("saisie2 éronnée \n"); } else { int cle_nb = atoi(insee_key); int insee_nb = atoi(insee_car); if((97-(insee_nb%97))!= cle_nb) { //opération pour déterminer si l'année est bissextile ou non printf("saisie3 éronnée \n"); } else { valid = true; } } } } while(!valid); sschaine(insee_string,1,2,masouschaine); annee = atoi(masouschaine); annee = annee + 1900; bissextile = test(annee); sschaine(insee_string,0,1,masouschaine); if(atoi(masouschaine) == 1) { if(bissextile) { printf("Monsieur vous êtes né une année bissextile \n"); } else { printf("Monsieur vous êtes né une année non bissextile \n"); } } else { if(bissextile) { printf("Madamme vous êtes née une année bissextile \n"); } else { printf("Madamme vous êtes née une année non bissextile \n"); } } system("pause"); }
int test(int an) { return ((an & 3) == 0 && ((an % 100) != 0 || (an % 400) == 0)); }
void sschaine(char insee_string[MAXI1], int inddeb, int long1, char masouschaine[MAXI1]) { int j, i; int indfin; indfin = inddeb + long1; j = 0; for(i = inddeb; i < indfin ; i++) { masouschaine[j] = insee_string[i]; j++; } masouschaine[j] = '\0'; }
int longueur(char *machaine) { char *c = machaine; while(*c) c++; return (c - machaine); }
ciao... BruNews, MVP VC++
|
|
mercredi 28 novembre 2007 à 22:47:27 |
Re : fonction atoi, débutant, c++,help

oli1207
|
ouai désolé pour la présentation, mais eu j'ai toujours pas trouver personne n'a la réponse ? parce que le programme ne passe toujours pas saisie 3
|
|
mercredi 28 novembre 2007 à 23:07:12 |
Re : fonction atoi, débutant, c++,help

titof3812
|
Salut oli1207
le probleme principale dans ton test est que un numero SS a 15 chiffre donc ton insee_car en a 13 et ne peut pas ter code dans un int par atoi tu doit au minimum utiliser un long long
suivant le compilateur tu peut utiliser
insee_nb =atoll (insee_car)
ou mieux
insee_nb =strtoll(insee_car, (char **)NULL, 10);
Je t'ai fait une petite correction ( sur mac avec un compilateur gcc) qui semble fonctionner essaie de voir ce que tu peut en tirer.
Note
1 Je me suis defineie TRUE et false et passe les bool en int paour pas me prendre la tete a trouver les definition en gcc mais tu doit pouvoire revenir au bool sur ton system.
2 ta fonctin longueur existe deja et s'appelle strlen en C
3 masouchaine2 doit demarrer de 13 et pas de 14
4 cle_nb etait mal definie car insey_key est deja un int donc atol ( inseykey) n'est pas correct
Bonne continuation mais structure un peu c'est plus facile alire
--------------------------------------
//#include "stdafx.h"
#include
#include
#include
#define MAXI1 15
#define TRUE 1
#define FALSE 0
// prototypage
int test(int an);
void sschaine(char insee_string[MAXI1+5],int inddeb,int long1 , char masouschaine[MAXI1+5]);
int longueur(char machaine[MAXI1+5]);
void main (void)
{
int valid = FALSE; //délclaration des variable
int bissextile;
char insee_car[MAXI1+5]="";
char insee_string[MAXI1+5]="";
char masouschaine[MAXI1+5]="";
char masouschaine1[MAXI1+5]="";
char masouschaine2[MAXI1+5]="";
int insee_key;
int annee;
int cle_nb;
int insee_nb;
if (TRUE)
printf ( "True=%i\n",TRUE);
else
printf ("True= %i\n",FALSE);
do //boucle
{
printf ("Saisir votre numéro Insee \n");
scanf(" %s",&insee_string, '\0');
sschaine(insee_string,0,1,masouschaine);
sschaine(insee_string,0,13,insee_car);
sschaine(insee_string,13,2,masouschaine2);
insee_key = atoi(masouschaine2);
printf ("%s\n%s\n%s\n", masouschaine, insee_car, masouschaine2);
if ( longueur(insee_string) != MAXI1 ) //vérification de la longueur du numéro
{
printf("saisie1 éronnée \n");
}
else
{
if (( atoi(masouschaine) != 1) && ( atoi(masouschaine) != 2) ) //différent de 1 ou 2(vérifier fille ou garçon
{
printf( "saisie2 éronnée \n");
}
else
{
int cle_nb=(insee_key);
long long insee_nb;
insee_nb =strtoll(insee_car, (char **)NULL, 10);
//insee_nb =atoll(insee_car);
if ((97-(insee_nb%97))!= cle_nb) //opération pour déterminer si l'année est bissextile ou non
{
printf("saisie3 éronnée \n");
}
else
{
printf ("saisie valid \n");
valid =TRUE ;
}
}
}
} while (valid == FALSE);
printf ("sortie boucle\n");
sschaine(insee_string,1,2,masouschaine);
annee = atoi(masouschaine);
annee = annee + 1900;
bissextile = test(annee);
sschaine(insee_string,0,1,masouschaine);
if (atoi(masouschaine) == 1)
{
if (bissextile == TRUE)
{
printf( "Monsieur vous êtes né une année bissextile \n");
}
else
{
printf( "Monsieur vous êtes né une année non bissextile \n");
}
}
else
{
if (bissextile == TRUE )
{
printf( "Madamme vous êtes née une année bissextile \n");
}
else
{
printf( "Madamme vous êtes née une année non bissextile \n");
}
}
}
// Fin du main
int test(int an) //test de l'année bisextile
{
int bissext = FALSE;
if ((an % 4 )!= 0)
bissext =FALSE ;
else
{
if ((an % 100 )!= 0)
bissext =TRUE ;
else
{
if ((an % 400 )!= 0)
bissext = FALSE ;
else
bissext = TRUE ;
}
}
return bissext;
}
// Fin de la fonction test()
void
sschaine(char insee_string[MAXI1+5],int inddeb,int long1 , char masouschaine[MAXI1+5]) //fonction sschaine( )
{
int j;
int indfin;
int i;
indfin = inddeb + long1 ;
j = 0;
for (i = inddeb; i < indfin ; i++)
{
masouschaine[j] = insee_string[i];
j++ ;
}
masouschaine[j] ='\0';
}
// fin de la fonction sschaine()
int
longueur(char machaine[MAXI1+5]) //fonction longueur pour vérifier la longueur de la chaine
{
int i = 0;
while (machaine[i] != '\0')
i = i + 1;
return i;
}
|
|
mercredi 28 novembre 2007 à 23:13:45 |
Re : fonction atoi, débutant, c++,help

titof3812
|
Réponse acceptée !
oups au fait j'ai assui commenter le #include stdfax.h qui est specifique windows
et vu que je suis sur mon mac ;-)
pense a le remettre
|
|
jeudi 29 novembre 2007 à 00:19:13 |
Re : fonction atoi, débutant, c++,help

oli1207
|
merci mai le programme ne fonctionne toujours pas alors vu que sa fait 2 jours que je me fai chi.... sur ce prog ben j'ai virer la condition avec le modulo 97 voila bon ben merci a tous sinon sa marche mais la saisie 3 est enlever voila a++ 
|
|
Cette discussion est classée dans : help, fonction, débutant, atoi, insee
Répondre à ce message
Sujets en rapport avec ce message
help aidez un débutant qui est tres tres mal [ par lepanard ]
bonjour a tous,voila, je suis actuellement en deusieme année de programmation (bac+2), mais le seul hic, c'est que je ne connais strictement rien à la
Fonction atoi [ par LordBob ]
Salut, en fait je voudrai savoir si la fonction atoi permet bien de transformé une chaine de caractere entré par un utilisateur par exemple en son eq
Fonction de saisie [Débutant] [ par nsr974 ]
Bonjour à tous,Voilà mon problème : Je dois réaliser une fonction de saisie qui serait capable de prendre soit une ou plusieurs variables, par exemple
Débutant : Quelle fonction pour les pixels ???? [ par sebeuste ]
Je voudrais reussir a definir chaque pixel de l'ecran de la console mais je ne sais pas quelle bibliothèque utilisée et quelle fonction non plus ....
fonction atoi + atof + itoa + ftoa +atol [ par sahliali ]
salut,je voulez savoir les codes sources de ces fonctions pour pouvoir comprendre mieux leur principe et comment sont ils developpéeset merci :)
Débutant MFC help !!!!!!! [ par Kangourou_Nomade ]
Bonjour, je viens de faire une appli de transmissions avec des automates en réseau qui marche nickel, mais le bleme c'est le côté graphique sous MFC,
Débutant pb de fonction [ par yann68moh ]
Bonjour tout le monde, je suis un débutant dans le language C++, j'utilise Visual C++ express.Je tente de programmer un client ftp spécifique mais je
Tracer le graphique d' une fonction [ par remilecool ]
Bonjour,je suis débutant en C, et je crée une question car mon problème est tellement spécifique et basique que les solutions générales proposés dans
Help, la fonction random en C [ par yahyaabba ]
Salut, Je veut que qqn m'aide pour ecrire le code source de la fonction aleatoire random, qui genère un nombre entiers aleatoire. Je n'ai aucun idée [
Fonction atoi() [ par piche32 ]
Bonjour, J'aurais besoin d'une explication sur la fonction atoi(). Je récupere un caractere grâce à un getchar() et j'aimerais avoir la valeur décimal
Livres en rapport
|
Derniers Blogs
JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|