begin process at 2012 05 29 04:48:08
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

fonction atoi, débutant, c++,help


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

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

Membre Club
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

Membre Club
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 variable

bool 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

Administrateur CodeS-SourceS
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

Administrateur CodeS-SourceS

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


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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,515 sec (3)

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