Conversion d'un nombre en C
Fermé
£udo
Messages postés
455
Date d'inscription
mardi 8 juin 2004
Statut
Membre
Dernière intervention
19 décembre 2006
-
21 nov. 2005 à 20:11
spidag - 25 oct. 2007 à 13:55
spidag - 25 oct. 2007 à 13:55
A voir également:
- Conversion d'un nombre en C
- Nombre facile - Télécharger - Outils professionnels
- En raison d'un nombre important d'échec de connexion snapchat ✓ - Forum Snapchat
- Comment savoir le nombre de message dans une conversation sms ✓ - Forum Téléphones & tablettes Android
- Gto nombre episode ✓ - Forum Jeux vidéo
- Le nombre de tentatives de déverrouillage incorrectes est trop élevé samsung ✓ - Forum Samsung
9 réponses
hssissen
Messages postés
844
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
9 janvier 2017
50
21 nov. 2005 à 20:30
21 nov. 2005 à 20:30
Salut,
Convertir un int en ascii ou vice versa, revient à convertir int en char et vice versa!
Convertir un int en ascii ou vice versa, revient à convertir int en char et vice versa!
£udo
Messages postés
455
Date d'inscription
mardi 8 juin 2004
Statut
Membre
Dernière intervention
19 décembre 2006
16
21 nov. 2005 à 20:31
21 nov. 2005 à 20:31
a oué , j'avais pas fais gaffe. On fait comment stp ?.
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
scol30
Messages postés
22
Date d'inscription
samedi 19 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2005
21 nov. 2005 à 20:42
21 nov. 2005 à 20:42
C'est bizarre j'ai copier puis coller ton code et il fonctionne plutôt bien chez moi. Si je rentre 2 le printf retourne bien 2.
sinon pour conversion de char vers int
atoi(const char *)
Stef
sinon pour conversion de char vers int
atoi(const char *)
Stef
£udo
Messages postés
455
Date d'inscription
mardi 8 juin 2004
Statut
Membre
Dernière intervention
19 décembre 2006
16
21 nov. 2005 à 20:44
21 nov. 2005 à 20:44
le code marche aussi chez moi, la varification passe et me renvoie bien le chiffre passé au debut. C'est au moment de l'enregistrement que ça passe pas
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
scol30
Messages postés
22
Date d'inscription
samedi 19 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2005
21 nov. 2005 à 20:45
21 nov. 2005 à 20:45
tu veux bien mettre ton code qui écrit dans le fichier s'il te plait.
Stef
Stef
£udo
Messages postés
455
Date d'inscription
mardi 8 juin 2004
Statut
Membre
Dernière intervention
19 décembre 2006
16
21 nov. 2005 à 20:48
21 nov. 2005 à 20:48
voila ma fonction ajout()
Jutilis donc la fonction verifnum() pour verifier que ce que saisi l'utilisateur soit bien un chiffre. ET quand ça marchera je le fera pour abscences et retenues.
La fonction verifnum() est la même qu'en haut
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
void ajout(FILE *f,char *n) { char machin; char choix; int retard; system("cls"); printf("AJOUT D'UNE FICHE ELEVE\n\n"); printf("ENTRER LE NOM DU FICHIER DANS LEQUEL VOUS VOULEZ L'INSCRIRE: "); flushall(); gets(n); flushall(); f = fopen(n,"a+"); //ouverture en "a+":lecture/écriture d'un fichier existant (mise à jour), pas de création //d'une nouvelle version, le pointeur est positionné à la fin du fichier. if (f == NULL) { printf("\nERREUR, CE FICHIER N'EXISTE PAS\n\n"); getch(); } else { do { printf("\nSAISIE D'UNE FICHE ?(o/n) "); choix = (char)getchar(); flushall(); if ((choix=='o')||(choix=='O')) { printf("\nNOM: "); gets(seleve.nom); flushall(); printf("PRENOM: "); gets(seleve.prenom); flushall(); printf("CLASSE: "); gets(seleve.classe); flushall(); //retard();/* printf("RETARD(S): "); scanf("%c",&machin);//%c pour prendre que le 1er caractère saisi retard=verifnum(&machin);//appel a la fonction printf("machin vaut apres la verif %c\n",retard); seleve.retard=retard; printf("RETENUE(S): "); scanf("%d",&seleve.retenue); flushall(); printf("ABSCENCE(S): "); scanf("%d",&seleve.abs); flushall(); fwrite(&seleve,sizeof(seleve),1,f); } }//fin do while((choix=='o')||(choix=='O')); }//fin else fclose(f); }
Jutilis donc la fonction verifnum() pour verifier que ce que saisi l'utilisateur soit bien un chiffre. ET quand ça marchera je le fera pour abscences et retenues.
La fonction verifnum() est la même qu'en haut
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
scol30
Messages postés
22
Date d'inscription
samedi 19 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2005
21 nov. 2005 à 21:31
21 nov. 2005 à 21:31
essaies de faire
return atoi(test);
comme retout de verifNum
Stef
return atoi(test);
comme retout de verifNum
Stef
£udo
Messages postés
455
Date d'inscription
mardi 8 juin 2004
Statut
Membre
Dernière intervention
19 décembre 2006
16
21 nov. 2005 à 21:54
21 nov. 2005 à 21:54
non ca marche pas, il me sort un bug juste apres avoir saisi le retard et apres je peux plus rien faire, je dois fermer mon PG
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
essaie ceci, chez moi ça fonctionne
#include <stdio.h> #include <string.h> #include <stdlib.h> int verifnum(char * str); int main(int argc, char * argv[]) { int x; char buffer[64]; do { printf(" Entrer un nombre : "); gets(buffer); x = verifnum(buffer); } while (x < 0); printf(" retard : %d", x); getchar(); return 0; } int verifnum(char * str) { int i, l = strlen(str); for (i = 0; i < l; i++) { if (!isdigit((int) str[i])) { i = -1; return i; } } return atoi(str); }
£udo
Messages postés
455
Date d'inscription
mardi 8 juin 2004
Statut
Membre
Dernière intervention
19 décembre 2006
16
22 nov. 2005 à 09:49
22 nov. 2005 à 09:49
jte remercie de ta reponse, mais je comprends pas trop les conditions de if. Peux tu m'expliquer stp?
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
cataclypse
>
£udo
Messages postés
455
Date d'inscription
mardi 8 juin 2004
Statut
Membre
Dernière intervention
19 décembre 2006
23 nov. 2005 à 08:46
23 nov. 2005 à 08:46
la condition du if test si le caractère est bien un entier ou pas.
int isdigit(int x) test le code ascii du caractère x (d'où le cast vers l'entier) et renvoie true s'il s'agit bien d'un entier et false sinon.
le ! est le not.
Il faut donc comprendre la fonction comme ceci:
pour tous les caractères de la chaine passée en argument (boucle for), dès qu'un caractère n'est pas un entier (condition if) on renvoie -1 pour exprimer l'erreur.
Après, dans le programme principal, on peut tester la valeur de retour de la fonction. Si c'est -1, c'est que notre chaine n'est pas un nombre correctement formaté.
C'est clair ?
int isdigit(int x) test le code ascii du caractère x (d'où le cast vers l'entier) et renvoie true s'il s'agit bien d'un entier et false sinon.
le ! est le not.
Il faut donc comprendre la fonction comme ceci:
pour tous les caractères de la chaine passée en argument (boucle for), dès qu'un caractère n'est pas un entier (condition if) on renvoie -1 pour exprimer l'erreur.
Après, dans le programme principal, on peut tester la valeur de retour de la fonction. Si c'est -1, c'est que notre chaine n'est pas un nombre correctement formaté.
C'est clair ?