>> 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
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);
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
[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
:).
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
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
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
Ça rend le code plus compliqué à comprendre :/. Sacré Outlook.
Voila, ThE_TemPLaR
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.
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- emdelYOURBRA@noos.fr [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/
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.