Chaine==>entier en C

didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   -  
Mahmah Messages postés 496 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   125
 
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   Statut Membre Dernière intervention   80
 
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   Statut Membre Dernière intervention   125 > didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention  
 
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