Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Reprise du fil de fr.sci.math

4 réponses
Avatar
Couic
>> Est-ce une erreur que d'écrire un nombre
>> comme ci-dessous pour le nombre 12 par exemple :
>> 000012 (avec des zéro devant) ?

>En général non. Mais dans les langages de programmation C et C++ un
>nombre entier littéral qui commence par 0 et qui ne contient que les
>chiffres 0 à 7 est interprété par convention comme un nombre octal.
>Dans ces langages la valeur de 000012 serait dix (1*8+2*1).
>--
>Horst

Justement, je posais cette question car j'ai fait une fonction de saisie
de nombres qui teste tout (me semble t-il) et qui ne laisse passer
comme "erreur" de saisie de l'utilisateur, que des nombres précédés de
zéros.
C'est pour ça que je demandais si ça pouvait être considéré comme une
erreur que d'écrire un nombre précédé de n zéros.
Je mets mon code pour celui que ça intéresse.
Couic


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include "definition.h"
#include "entete.h"


unsigned int saisie(char *pTexte) {

int nbNumeroAGenerer;
char saisie[TAILLE_BUFFER];
char *pCharFinLigne = NULL; /* pointera vers '\n' dans le buffer de saisie
*/
size_t longueurSaisie;
booleen statutSaisie;
int caractereLu;
int i;

do {
statutSaisie = VRAI;
printf(pTexte);
fflush(stdout);

if(fgets(saisie, TAILLE_BUFFER, stdin) == NULL) {
printf("\n");
printf("Fichier %s\nLigne %d : erreur de \"fgets\".\n\n",
__FILE__, __LINE__);
printf("Pressez <enter> pour quitter le programme.");
fflush(stdout);
getchar();
exit(EXIT_FAILURE);
}

printf("\n");

/* recherche du '\n' dans la saisie de l'utilisateur :
- si '\n' non trouvé : saisie trop longue => '\n' resté dans le buffer
de stdin */
if((pCharFinLigne = strchr(saisie, '\n')) == NULL) {

/* vide le buffer de stdin qui contient donc le '\n'. */
while((caractereLu = getchar()) != '\n' && caractereLu != EOF)
;
printf("Saisie trop longue. Recommencez.\n");
}

else {
/* - si '\n' trouvé : on a mémorisé toute la saisie, on le remplace par
'\0' */
*pCharFinLigne = '\0';

/* si chaîne vide (l'utilisateur n'a fait qu'un <enter>, afficher message)
*/
if(!(longueurSaisie = strlen(saisie)))
printf("Vous n'avez rien saisi! Recommencez.\n");

/* sinon, on vérifie que tous les éléments soient des chiffres */
else {
for(i = 0; i < (int)longueurSaisie; i++) {
if(!isdigit(saisie[i])) {
printf("Saisie invalide : \"%c\" n'est pas un chiffre.\n", saisie[i]);
statutSaisie = FAUX;
break;
}
}
}
}

/* tant que saisie_trop_longue ou chaîne_vide ou !_chiffre */
} while(!pCharFinLigne || !longueurSaisie || !statutSaisie);

nbNumeroAGenerer = atoi(saisie);

return nbNumeroAGenerer;
}

4 réponses

Avatar
Eddahbi Karim

[snip]

Formate ton code, même les commentaires, sinon c'est presque illisible.
A continuer comme ça, tu risques de tomber ici :
http://www.gr.ioccc.org/main.html

Sinon, n'utilise pas de TAB pour les identations mais plutot des espaces
:).

Voila,
ThE_TemPLaR
Avatar
Couic
Formate ton code,


C'est à dire ?

A continuer comme ça, tu risques de tomber ici :


Si tu fais allusion à l'indentation, c'est Outlook qui casse tout.
Couic

Avatar
Eddahbi Karim
Aïe,

Ça rend le code plus compliqué à comprendre :/.
Sacré Outlook.

Voila,
ThE_TemPLaR
Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', "Couic" <...> wrote:

Est-ce une erreur que d'écrire un nombre
comme ci-dessous pour le nombre 12 par exemple :
000012 (avec des zéro devant) ?


En général non. Mais dans les langages de programmation C et C++ un
nombre entier littéral qui commence par 0 et qui ne contient que les
chiffres 0 à 7 est interprété par convention comme un nombre octal.



/Peut être/ interprété. Ca dépend de la fonction de conversion. Ce sera le
cas si la base est explicitement de l'octal:

strto*(*,*,8)
*scanf("%o",*)

ou si on est en mode automatique:

strto*(*,*,0)
*scanf("%i",*)

Justement, je posais cette question car j'ai fait une fonction de saisie
de nombres qui teste tout (me semble t-il) et qui ne laisse passer
comme "erreur" de saisie de l'utilisateur, que des nombres précédés de
zéros.
C'est pour ça que je demandais si ça pouvait être considéré comme une
erreur que d'écrire un nombre précédé de n zéros.


C'est une question de spécifications et non de langage. C'est au spécifieur
de décider.

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/