Chaine==>entier en C

Fermé
didy_gwatinik Messages postés 352 Date d'inscription samedi 17 novembre 2007 Statut Membre Dernière intervention 30 mars 2010 - 23 mars 2008 à 19:32
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 23 mars 2008 à 21:22
Bonjour,
J'ai un souci, je suis sur un programme qui travaille avec les fichiers. J'ai par exemple le nombre 5 dans le fichier, je le récupère à l'aide de la fonction fgets puis je veux le placer dans une variable. Comment faire pour convertir la chaine que je récupère dans le fichier pour mettre le contenu dans une variable de type int.Je ne sais pas si je suis assez claire. J'ai vu qu'on pouvait utiliser uen fonction atoi() mais je n'y comprends rien et je ne sais pas si elle est approprié. Si quelqu'un pouvait m'aider ca serait sympa.
A voir également:

1 réponse

Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
23 mars 2008 à 20:11
Bonjour,

atoi est appropriée, son nom est l'abrégé de alpha to integer.

Dans le cas d'un fichier répondant à un format connu, par exemple sur chaque ligne, 2 nombres séparés par un point virgule puis un égal et une chaîne, on utilisera plutôt fscan.

unsigned int nbLectureReussies; // Récupération du nombre de variables correctement remplies.

nbLectureReussies = fscanf( "%d ; %d = %s", &nbr1, &nbr2, str );


M.
0
didy_gwatinik Messages postés 352 Date d'inscription samedi 17 novembre 2007 Statut Membre Dernière intervention 30 mars 2010 80
23 mars 2008 à 20:16
peux tu me dire à quoi correspond nbLectureReussies :
moi je recupere une chaine que j'ai appelé chaine , je veux placer son contenu dans la variable nbContact. Tu peux me mettre un exemple avec le nom de mes variables s'il te plait?
0
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125 > didy_gwatinik Messages postés 352 Date d'inscription samedi 17 novembre 2007 Statut Membre Dernière intervention 30 mars 2010
23 mars 2008 à 21:22
scanf peut lire plusieurs données d'un coup selon la première chaîne qui lui est passée et qui contient des codes commençant par %. (%d un entier, %c un caractère etc) La valeur de retour est le nombre de variable pour lesquelles scanf a pu trouver une valeur.

par exemple pour:
int nb1;
int nb2;
char *str;

scanf( "%d ; %d = %s", &nb1, &nb2, str );


scanf renverra pour les données suivantes:
1)
27 ; 33 = bonjour
-> 3, ce qui signifie que toutes les variables on reçu une valeur.

2)
-2;+98 = pouet
-> 3 aussi, scanf ne prends pas en compte le nombre d'espaces.

3)
27 ; 33 = bonjour tout le monde
-> 3 mais str ne prendra que "bonjour"

4)
27
-> 1. nb2 et str ne sont pas modifiés.

5)
27 33 = bonjour
-> 1, impossible de trouver le ';' demandé.


Il existe la fonction fscanf pour les fichiers.


Si le fichier lu n'a pas de format spécifique, le atoi convient tout aussi bien. (Vu le nom de tes variables j'ai autre chose à vendre pour après ^^)

char chaine[1024];
int nbContacts = 0;

if ( fgets( chaine, 1024, tonFichierDeTypeFILEEtoile ) != NULL )
{
    nbContacts = atoi( chaine );
}


Ce code devrait être le bon. Je propose un truc plus...
Je suppose qu'il existe quelque part dans ton code un Contact
typdef struct _Contact
{
   char nom[100];
   char prenom[100];
   unsgined int age;
} Contact;


Dans ce cas je ferais un fichier binaire et non plus texte.
FILE *file = fopen( "c:\\Hop.truc", "wb" ); // Write et Binary

if ( file != NULL )
{
   fwrite( &nombreContacts, sizeof( nombreContacts ), 1, file );

   fwrite( monTableauDeStructuresContacts, sizeof( Contact ), nombreContacts, file );

   fclose( file );
}

Cela fera donc un fichier qui contient le nombre de contact, puis les structures Contact.

Enfin, je dis ça au cas où ça peut servir...
M.
0