Conversion en C
salut, voila mon code
Cet apres midi, jai donc voulu faire un controle. Il faut que le retard saisi par l'utilisateur soit un chiffre sinon ça passe pas. Donc je fais le controle et ça marche. Apres jveux l'enregistrer mais ça passe pas. Je ne peux convertir une chaine en un entier. Jai testé avec la fonction atoi mais j'ai des erreurs. Comment je dois m'y prendre svp ??
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
void ajout(FILE *f,char *n) { char machin; char choix; 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(strupr(seleve.nom)); flushall(); printf("PRENOM: "); gets(seleve.prenom); flushall(); printf("CLASSE: "); gets(seleve.classe); flushall(); //retard();/* printf("RETARD(S): "); scanf("%s",&machin); while(isdigit(machin)==0) { printf("Erreur, saisissez un nombre\n"); scanf("%s",&machin); } printf("OK"); strcpy(&seleve.retard,machin); 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); }
Cet apres midi, jai donc voulu faire un controle. Il faut que le retard saisi par l'utilisateur soit un chiffre sinon ça passe pas. Donc je fais le controle et ça marche. Apres jveux l'enregistrer mais ça passe pas. Je ne peux convertir une chaine en un entier. Jai testé avec la fonction atoi mais j'ai des erreurs. Comment je dois m'y prendre svp ??
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
A voir également:
- Conversion en C
- Logiciel gratuit conversion calendrier républicain - Télécharger - Études & Formations
- Conversion mb en mo ✓ - Forum Matériel & Système
- Conversion mb en go ✓ - Forum Mail
- Conversion bytes en mo - Forum Réseau
- Monnaie conversion - Télécharger - Banque & Budget
3 réponses
Salut,
Dans tes déclarations :
char machin ; => c'est un caractère
Plus loin
scanf( "%s", &machin ) ; => si tu veux saisir un seul caractère c'est %c
Sinon risque d'avoir des plantages intempestifs
strcpy(&seleve.retard,machin); => la fonction strcpy() est réservée au
chaine de caractères (risque de plante), utilises une affectation simple
eleve.retard = machin ;
Ensuite pour convertir, si c'est un seul chiffre :
int retard_entier ; dans les déclarations
retard = (int)( retard - '0' ) ; dans le traitement
[ retard contient le code ascii du chiffre, si tu enlèves le code ascii de 0 au
code ascii d'un chiffre t'obtient la valeur entière de ce chiffre]
Si tu veux absolument saisir une chaine
char retard[16] ;
scanf( "%s", retard ) ; // ca protège pas contre dépassement de pile, mais
ça doit pas être encore au programme
vérification
ajout dans les déclarations :
int i,ok ;
Boucle de vérification
la boucle for() part du principe qu'en C, une chaine de caratères se termine
par le caractère 0 ( '\0' ) .
[j'espère ne pas trop m'être planté dans le code C]
A+, crabs
Dans tes déclarations :
char machin ; => c'est un caractère
Plus loin
scanf( "%s", &machin ) ; => si tu veux saisir un seul caractère c'est %c
Sinon risque d'avoir des plantages intempestifs
strcpy(&seleve.retard,machin); => la fonction strcpy() est réservée au
chaine de caractères (risque de plante), utilises une affectation simple
eleve.retard = machin ;
Ensuite pour convertir, si c'est un seul chiffre :
int retard_entier ; dans les déclarations
retard = (int)( retard - '0' ) ; dans le traitement
[ retard contient le code ascii du chiffre, si tu enlèves le code ascii de 0 au
code ascii d'un chiffre t'obtient la valeur entière de ce chiffre]
Si tu veux absolument saisir une chaine
char retard[16] ;
scanf( "%s", retard ) ; // ca protège pas contre dépassement de pile, mais
ça doit pas être encore au programme
vérification
ajout dans les déclarations :
int i,ok ;
Boucle de vérification
ok=0 ; while ( !ok ) { printf( "Retard : " ) ; fflush(stdout ) ; fflush( stdin ) ; scanf( "%s", retard ) ; ok = 1 ; /* on part du principe que c'est ok for( i=0; retard[i]; i++ ) if ( !isdigit( retard[i] ) ) { ok=0; break ; } } eleve.retard = atoi( retard ) ;
la boucle for() part du principe qu'en C, une chaine de caratères se termine
par le caractère 0 ( '\0' ) .
[j'espère ne pas trop m'être planté dans le code C]
A+, crabs
jte remercie ça passe bien. Mais je ne comprends pas trop la conversion
Ensuite pour convertir, si c'est un seul chiffre :
int retard_entier ; dans les déclarations
retard = (int)( retard - '0' ) ; dans le traitement
[ retard contient le code ascii du chiffre, si tu enlèves le code ascii de 0 au
code ascii d'un chiffre t'obtient la valeur entière de ce chiffre]
peux tu m'expliquer stp?
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
Ensuite pour convertir, si c'est un seul chiffre :
int retard_entier ; dans les déclarations
retard = (int)( retard - '0' ) ; dans le traitement
[ retard contient le code ascii du chiffre, si tu enlèves le code ascii de 0 au
code ascii d'un chiffre t'obtient la valeur entière de ce chiffre]
peux tu m'expliquer stp?
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)