Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage C > le controle de chiffre > Lecture du sujet

le controle de chiffre

Vous devez être inscrit pour pouvoir poster des messages

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne el-khawarrizmi # Posté le 12/05/2008 à 01:46:01
_____/'G|U|S/'______
Avatar
Groupe : Membres
salut,

le but de nombre petit programme : contrôler le nombre saisie , il doit être un chiffre or ça affiche une erreur et donne la main pour re-saisie et les nombres négatif aussi on ne les accepte pas

voilà ce que j'ai fait Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<stdio.h>
#include<stdlib.h>
int control_nombre(int);
int main()
{
int nombre_club;
printf("combien du club voulez vous saisir\n");
printf("le nombre doit être entre 1 et 50 \n");
scanf("%d",&nombre_club);
nombre_club=control_nombre(nombre_club);
system("pause");
return 0;
}
int control_nombre(int x)
{
if(x<0)
{
printf("erreur 1:le nombre doit être superier de chiffre Zéro \n");
printf("merci de re-entrer le nombre du club\n");
scanf("%d",&x);
}
else
    do
      {
      printf("erreur 2:Le caractère doit être un chiffre\n");
      printf("merci de re-entrer le nombre du club\n");
      scanf("%d",&x);
      }while ((x>'1')&&(x<'50'));
return x;
}


Le problème que l'exécutable ne donne pas la main pour re-saisir quand on entre une lettre il affiche l'erreur numéro 2 et il l'application termine


merci d'avance pour l'aide

Ps:j'aime bien vos idées

SVP, ne commanter pas sur mon français svp je sais qu'il est mal mais je vous assure que je fais des efforts. ^^
 
Hors ligne LoupSolitaire # Posté le 12/05/2008 à 03:02:49
Avatar
Groupe : Membres
Indente correctement et saute des lignes, c'est peu lisible là...

Sinon je te conseille d'utiliser un seul scanf dans une boucle do{}while

Ton contrôle est incohérent, dans tous les cas tu renvoie une erreur et au niveau de la seconde partie, tu compares un entier avec des caractères.

C# m'a tuer
 
Hors ligne aska990 # Posté le 12/05/2008 à 05:13:01
Je vais manger moult frites !
Avatar
Groupe : Membres
bizarre bizarre...

le post est sans aucune faute d'orthographe, mais alors les printf du programme... :p


bon sinon ton truc est un peu incohérent
tu veux faire quoi ? faire rentrer un nombre à l'utilisateur, puis vérifier si ce n'est pas une lettre et si il est compris entre 1 et 50 ?
si c'est le cas tu as une drôle de façon de procéder

c'est normal qu'il te mette l'erreur 2 :
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
int control_nombre(int x)
{
if(x<0)
{
printf("erreur 1:le nombre doit être superier de chiffre Zéro \n");
printf("merci de re-entrer le nombre du club\n");
scanf("%d",&x);
}
else
    do
      {
      printf("erreur 2:Le caractère doit être un chiffre\n");
      printf("merci de re-entrer le nombre du club\n");
      scanf("%d",&x);
      }while ((x>'1')&&(x<'50'));
return x;
}


vu que tu fais un do...while, le contenu de la boucle s'éxécute au moins une fois, donc il te mettra forcément au moins une fois l'erreur 2.

D'ailleurs, ton erreur 2 dit que le caractere doit être un chiffre, mais tu testes (pour tester un nombre, pas besoin de le mettre entre guillemets, ça c'est pour les caractères autres que les nombres) si il est supérieur à 50 ou inférieur à 1 !!

De toutes façon, en console, si l'utilisateur rentre des lettres au lieu de chiffres, le programme se met toujours à bugger

par contre, tu ne fais pas de boucle pour la première erreur, ça veut dire que l'utilisateur ne pourra pas rentrer un nombre au dessous de zéro la première fois, mais après, il le pourra

ensuite, à quoi ça sert de renvoyer le nombre ?? o_O

bon, voici le code corrigé :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<stdio.h>
#include<stdlib.h>


void control_nombre(int);

int main()
    {
    int nombre_club;
    printf("Quel numero du club voulez vous saisir\n");
    printf("le nombre doit etre entre 1 et 50 \n");
    scanf("%d", &nombre_club);
    control_nombre(nombre_club);
    system("pause");
    return 0;
}


void control_nombre(int x)
{
    while(x <= 0 || x > 50)
    {
        if(x <= 0)
        {
            printf("\n\n\nerreur 1:le nombre doit etre superieur a zero \n");
            printf("merci de re-entrer le numero du club\n");
        }


        if(x > 50)
        {
            printf("\n\n\nerreur 2:Le caractere doit etre inferieur a 50 \n");
            printf("merci de re-entrer le numero du club\n");
        }

        scanf("%d",&x);
    }

    printf("\n\n\nSaisie ok\n\n\n");
}


j'ai remplacé l'erreur "le caractere doit être un chiffre" par "Le caractere doit etre inferieur a 50"

j'ai aussi corrigé les fautes d'orthographe (tu avais aussi mis des accents : ils n'apparaissent pas en console :-° )

allez, bye

Édité le 12/05/2008 à 05:31:55 par aska990
 
Hors ligne el-khawarrizmi # Posté le 13/05/2008 à 12:48:47
_____/'G|U|S/'______
Avatar
Groupe : Membres
c'est régler pour les chiffres merci

mais quand je tape une lettre ou un caractère comme le point la virgule...etc. Il boucle une boucle infinie c'est pour ça j'ai fait '1' et '50'

est-ce que je peux trouver ici les codes ASCII des caractère

Édité le 13/05/2008 à 12:58:41 par el-khawarrizmi

SVP, ne commanter pas sur mon français svp je sais qu'il est mal mais je vous assure que je fais des efforts. ^^
 
Hors ligne LoupSolitaire # Posté le 13/05/2008 à 13:04:51
Avatar
Groupe : Membres
recherche google ascii, tu trouve plein d'images représentant la table des caractères ASCII ;)

C# m'a tuer
 
Hors ligne el-khawarrizmi # Posté le 13/05/2008 à 13:40:08
_____/'G|U|S/'______
Avatar
Groupe : Membres
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include<stdio.h>
#include<stdlib.h>
char control_nombre(int);
int main()
{
char nombre_club;
printf("\n\ncombien du club voulez vous saisir\n\n\n");
printf("le nombre doit être entre 1 et 50 \n");
scanf("%d",&nombre_club);
nombre_club = control_nombre(nombre_club);
system("pause");
return 0;
}
char control_nombre(int x)
{
    while(x <= 0 || x > 50)
    {
        if(x <= 0)
        {
            printf("\n\n\nerreur 1:le nombre doit etre superieur a zero \n");
            printf("Merci de re-entrer le numero du club\n");
        }


        if(x > 50)
        {
            printf("\n\n\nerreur 2:Le nombre doit etre inferieur a 50 \n");
            printf("Merci de re-entrer le numero du club\n");
        }
        if(x >= 'a' || x <= 'z')
         {
          printf("\n\n\n erreur 3: c'est t'une lettre alphabetique \n");
          printf("Merci de re-entrer le numero du club\n");
          }

        scanf("%d",&x);
    }

    printf("\n\n\nSaisie ok\n\n\n");
return x;    
}


j'ai ajouté le contrôle des lettres alphabétique et j'ai convertie le int à un char
mais toujours boucle infiniment

SVP, ne commanter pas sur mon français svp je sais qu'il est mal mais je vous assure que je fais des efforts. ^^
 
Hors ligne -ed- # Posté le 13/05/2008 à 14:05:06
C is a sharp tool
Avatar
Groupe : Membres
Citation : guis
le but de nombre petit programme

Aucun sens. Essaye d'écrire en français compréhensible...

Pour ton problème, il faut travailler sur 3 niveaux :

1 - commence par faire une saisie de ligne correcte et stable :

http://www.siteduzero.com/tuto-3-11181 [...] -a-fgets.html

2 - ensuite, tu la convertis en entier en utilisant correctement strtol(), qui est capable de dire si la chaine saisie est correcte ou non.

3 - Enfin, tu vérifie que le domaine de valeurs est correct.
Édité le 13/05/2008 à 14:08:31 par -ed-

Emmanuel Delahaye. Image utilisateur
Des infos sur la programmation et le langage C:
http://bien-programmer.blogspot.com/
http://mapage.noos.fr/emdel/

 
Hors ligne aiii # Posté le 13/05/2008 à 14:05:54
Avatar
Groupe : Membres
Ouch, on voit bien les limites de scanf ...
Ton programme est ... dénudé de sens. La logique de codage est incompréhensible.

@-ed-: Oui, mais si je tape 'e', et que fais une conversion, que vais-je obtenir ? 0 !
Édité le 13/05/2008 à 14:16:48 par aiii
 
Hors ligne tc # Posté le 13/05/2008 à 14:19:25
Readability counts
Avatar
Groupe : Membres
Pour vérifier une saisie, tu peux utiliser:

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <stdlib.h>

void purge(void)
{
    int c;

    while ((c = fgetc(stdin)) != '\n' && c != EOF)
    {
    }
}

long saisir_entier(char const *message, long min, long max)
{
    long ret;
    int rv;

    do
    {
        if (message != NULL)
        {
            printf("%s ", message);
            fflush(stdout);
        }
        rv = scanf("%ld", &ret);
        purge();
    }
    while (rv != 1 || ret < min || ret > max);

    return ret;
}

int main(void)
{
    int nombre_club;

    nombre_club = saisir_entier("le nombre doit être entre 1 et 50 :", 1, 50);
    printf("Le nombre saisi vaut %d\n", nombre_club);

    return 0;
}


Tu peux également baser cette fonction sur fgets() et strtol().

Thierry

"Personne n'a jamais tout à fait tord. Même une horloge arrêtée donne l'heure juste deux fois par jour."

| FAQ-Python | FAQ-C - FAQ-c.l.c | FAQ-C++ - FAQ-Lite |
 
Hors ligne -ed- # Posté le 13/05/2008 à 14:57:55
C is a sharp tool
Avatar
Groupe : Membres
Citation : aiii
@-ed-: Oui, mais si je tape 'e', et que fais une conversion, que vais-je obtenir ? 0 !

Il faut traiter intelligemment l'information donnée par le 2ème paramètre de strtol(). Pour ça, il faut commencer par lire la doc et en comprendre le rôle.

@Thierry :

Ton code ignore silencieusement l'erreur de saisie :
Code : Console
le nombre doit Ûtre entre 1 et 50 : e
le nombre doit Ûtre entre 1 et 50 : 10e
Le nombre saisi vaut 10

Press ENTER to continue.

Édité le 13/05/2008 à 15:00:43 par -ed-

Emmanuel Delahaye. Image utilisateur
Des infos sur la programmation et le langage C:
http://bien-programmer.blogspot.com/
http://mapage.noos.fr/emdel/

 
Hors ligne tc # Posté le 13/05/2008 à 15:35:45
Readability counts
Avatar
Groupe : Membres
Citation : -ed-

@Thierry :

Ton code ignore silencieusement l'erreur de saisie :
Code : Console
le nombre doit Ûtre entre 1 et 50 : e
le nombre doit Ûtre entre 1 et 50 : 10e
Le nombre saisi vaut 10

Press ENTER to continue.



Oui. C'était un choix délibéré, la question étant de savoir s'il est pertinent d'ignorer ce type d'erreur de saisie. Ceci corrige mon code précédent:

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <stdio.h>
#include <stdlib.h>

void purge(void)
{
    int c;

    while ((c = fgetc(stdin)) != '\n' && c != EOF)
    {
    }
}

long saisir_entier(char const *message, long min, long max)
{
    long ret;
    int err;

    do
    {
        int c;
        err = 0;

        if (message != NULL)
        {
            printf("%s ", message);
            fflush(stdout);
        }

        if (scanf("%ld", &ret) != 1)
        {
            err = 1;
        }

        c = getchar();
        if (c != '\n' && c != EOF)
        {
            err = 1;
            purge();
        }
    }
    while (err != 0 || ret < min || ret > max);

    return ret;
}

int main(void)
{
    int nombre_club;

    nombre_club = saisir_entier("le nombre doit être entre 1 et 50 :", 1, 50);
    printf("Le nombre saisi vaut %d\n", nombre_club);

    return 0;
}


Thierry

"Personne n'a jamais tout à fait tord. Même une horloge arrêtée donne l'heure juste deux fois par jour."

| FAQ-Python | FAQ-C - FAQ-c.l.c | FAQ-C++ - FAQ-Lite |
 
Hors ligne el-khawarrizmi # Posté le 13/05/2008 à 17:26:25
_____/'G|U|S/'______
Avatar
Groupe : Membres
merci pour l'aide

j'ai lu le tuto qui l'a donné -ed-

j'ai trouver cette fonction
Code : C
1
2
3
4
5
6
7
8
void purge(void)
{
    int c;

    while ((c = fgetc(stdin)) != '\n' && c != EOF)
    {
    }
}
mais je n'ai pas compris qu'est-ce qu'elle fait j'ai essayé la déroule et j'ai eu quelque ambiguïté
Code : C
1
2
long ret;
    int err;
que ségnifie ces deux variable
Code : C
1
fflush(stdout);
même celà jamais vu

SVP, ne commanter pas sur mon français svp je sais qu'il est mal mais je vous assure que je fais des efforts. ^^
 
Hors ligne tc # Posté le 13/05/2008 à 19:26:49
Readability counts
Avatar
Groupe : Membres
La fonction purge() permet d'éliminer les caractères non lus par scanf(), tel que le caractère de fin de ligne '\n' qui vient de la validation de la saisie à l'aide de la touche ENTER de ton clavier. purge() fonctionne de la manière suivante:

Code : C
1
2
3
4
5
6
7
8
void purge(void)
{
    int c;

    while ((c = fgetc(stdin)) != '\n' && c != EOF)
    {
    }
}


On lit chaque caractère qui se trouve dans le tampon du flux d'entrée standard (normallement le flux associé au clavier) jusqu'à ce qu'on rencontre le caractère de validation par ENTER (i.e. '\n'). On ignore chacun de ces caractères.

Késako le flux d'entrée standard ? Tampon ? Lorsque tu demandes à l'utilisateur d'entrer un nombre au clavier, celui-ci s'exécute et entre par exemple le nombre 1977 + ENTER. Ensuite, les caractères ('1', '9', '7', '7', '\n') sont stockés via le flux associé au clavier (flux d'entrée standard ou encore stdin) dans un espace mémoire mémoire appelé tampon. C'est dans cet espace tampon que scanf() vient puiser les caractères dont elle a besoin pour effectuer la conversion demandée. Ainsi, scanf() va extraire les caractères ('1', '9', '7', '7') du tampon de stdin, effectuer la conversion, et stocker la valeur entière 1977 dans la variable ret, qui n'est rien d'autre que la variable contenant la valeur qui sera retournée par notre fonction saisir_entier().

Seulement, voilà! Il reste encore dans notre tampon le caractère '\n'. La présence de ce caractère peux se montrer génante pour les saisies futures. C'est pourquoi il est conseillé de purger le tampon de stdin pour éliminer '\n' et les autres caractères qui n'auraient éventuellement pas été lus par scanf(). En effet, il n'est pas garanti que l'utilisateur se limite à saisir les caractères "1977" + '\n'. Il se peut que par maladresse (ou dans un but moins louable), ce même utilisateur saisisse les caractères "1977abcdefghijklmn" + '\n'. Dans ce cas, scanf() consomme les 4 premiers caractères (les chiffres) pour accomplir sa conversion, mais les caractères "abcdefghijklmn\n" restent dans le tampon en attente d'un prochain appel à scanf(), fgets() ou fgetc(stdin). Tant qu'il reste des caractères dans le tampon, les fonctions d'entrée que je vient de citer chercheront à les utiliser et elles n'attendront pas que l'utilisateur introduise une nouvelle saisie. C'est ce qui passe avec le code suivant:

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#include <stdio.h>

int main(void)
{
    int n;

    do
    {
        printf("Entrez un nombre entre 1 et 10 : ");
        fflush(stdout);
        scanf("%d", &n);
    }
    while (n < 1 || n > 10);

    return 0;
}


Si l'utilisateur introduit "1977abcdefghijklmn" + '\n', on constate que le programme part dans une boucle infinie. Que se passe-t'il ? scanf() commence par convertir les 4 premiers caractères et stocke la valeur entière 1977 dans la variable n. Comme n est plus grand que 10, on recommence l'opération. Comme il reste des caractères dans le tampon du flux d'entrée standard, scanf() n'attend pas que l'utilisateur effectue une nouvelle saisie. Il cherche à nouveau à convertir une valeur entière. Comme il ne reste que des lettres dans le tampon, il n'y parvient pas. Sur cet échec, scanf() retourne la valeur 0 pour indiquer qu'il n'a pas été en mesure d'effectuer la conversion, mais comme on ne vérifie pas cette valeur, on ne le voit pas. La valeur de n reste inchangée et vaut toujours 1977. Comme 1977 est plus grand que 10, rebelotte! On effectue un nouveau tour de boucle. scanf() essaie à nouveau d'extraire des caractères du tampon de stdin pour sa conversion, mais sans succès. scanf() continue à retourner 0 et la valeur de n reste inchangée à la valeur 1977. On part dans une boucle infinie.

Le petit exemple ci-dessus démontre pourquoi il est important de purger la tampon du flux d'entrée standard après chaque saisie. La fonction purge() fonctionne comme suit: elle lit chacun des caractères non lus "abcdefghijhklmn\n" un à un. Au 1er tour de boucle, c reçoit la valeur 'a'. Comme cette valeur est différente de '\n' et de EOF, la boucle continue sans rien faire avec la valeur de c (le corps de la boucle est vide). Au 2ème tour de boucle, c reçoit la valeur 'b' qui est différente de '\n' et de EOF. On continue et on ne fait toujours rien de c (chaque caractère lu est ignoré)! Et ainsi de suite jusqu'au 15e tour de boucle ou c reçoit la valeur '\n'. La boucle s'arrete et il ne reste plus de caractère dans le tampon du flux d'entrée standard.

Voilà, notre code s'améliore:

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>

void purge(void)
{
    int c;

    while ((c = fgetc(stdin)) != '\n' && c != EOF)
    {
    }
}

int main(void)
{
    int n;

    do
    {
        printf("Entrez un nombre entre 1 et 10 : ");
        fflush(stdout);
        scanf("%d", &n);
        purge();
    }
    while (n < 1 || n > 10);

    return 0;
}


Notre code est maintenant plus sur. Lorsque l'utilisateur introduit quelque chose comme "1977abcdefghijklmn"+'\n', on ne part plus dans une boucle infinie. Il ne nous reste plus qu'à gérer les erreurs de conversion. Comme nous l'avons évoqué précédamment, lorsqu'un utilisateur maladroit introduit la saisie "abcde" + '\n' alors qu'on attend de lui un entier, scanf() ne parvient pas à effectuer la conversion. Pour repérer cette erreur, il suffit de tester la valeur de retour de scanf() (c'est d'ailleurs un pratique conseillée de tester cette valeur de manière systématique). Notre code devient:

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>

void purge(void)
{
    int c;

    while ((c = fgetc(stdin)) != '\n' && c != EOF)
    {
    }
}

int main(void)
{
    int n;
    int err; /* -tc- indicateur d'erreur */

    do
    {
        /* -tc- On commence chaque tour de boucle par initialiser l'indicateur
           d'erreur à la valeur 0 (pas d'erreur) */
        err = 0;

        printf("Entrez un nombre entre 1 et 10 : ");
        fflush(stdout);
        /* -tc- on teste la valeur retournee par scanf(). Si elle est differente
           de 1, on positionne l'indicateur d'erreur a la valeur 1 */
        if (scanf("%d", &n) != 1)
        {
            err = 1;
        }
        purge();
    }
    /* -tc- Bien entendu, on refuse de sortir de la boucle, tant que scanf() n'a
       pas accompli son job correctement (auquel cas err vaut 0) */
    while (err != 0 || n < 1 || n > 10);

    return 0;
}


A ce stade, notre code est pas mal, mais il accepte encore des entrées telles que "10abcdef" + '\n'. Pour remédier à cela, on place l'indicateur d'erreur à 1 si le premier caractère lu après la saisie de l'entier est différent de '\n' ou de EOF. On obtient finalement un code équivalent à celui posté avec la fonction saisir_entier:

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>

void purge(void)
{
    int c;

    while ((c = fgetc(stdin)) != '\n' && c != EOF)
    {
    }
}

int main(void)
{
    int n;
    int err; /* -tc- indicateur d'erreur */

    do
    {
        int c;

        /* -tc- On commence chaque tour de boucle par initialiser l'indicateur
           d'erreur à la valeur 0 (pas d'erreur) */
        err = 0;

        printf("Entrez un nombre entre 1 et 10 : ");
        fflush(stdout);
        /* -tc- on teste la valeur retournee par scanf(). Si elle est differente
           de 1, on positionne l'indicateur d'erreur a la valeur 1 */
        if (scanf("%d", &n) != 1)
        {
            err = 1;
        }
        c = fgetc(stdin);
        /* -tc- Si l'entier est suivi par un caractere different de '\n' ou EOF,
           on purge le tampon du flux d'entree standard et on signale l'erreur */
        if (c != '\n' && c != EOF)
        {
            err = 1;
            purge();
        }

    }
    /* -tc- Bien entendu, on refuse de sortir de la boucle, tant que scanf() n'a
       pas accompli son job correctement (auquel cas err vaut 0) */
    while (err != 0 || n < 1 || n > 10);

    return 0;
}


Voilà, j'aurais sans doute pu faire plus court, mais je n'étais pas très inspiré.

En ce qui concerne l'appel à fflush(stdout) que tu as également demandé d'expliquer, il est nécessaire pour forcer l'affichage de l'invite de saisie lorsque celle-ci ne se termine pas par un caractère de fin de ligne. En effet, comme avec le flux d'entrée standard, printf() envoie les caractères à afficher dans le tampon du flux de sortie standard. Il ne vide ce tampon qu'occasionnellement. Ce mécanisme a été mis en place afin d'optimiser les opérations d'affichage qui sont relativement lentes. Il y a trois événement qui purgent le tampon de stdout et déclanchent ainsi l'affichage sur la console:
  • Le tampon est plein
  • Un caractère de fin de ligne '\n' est rencontré
  • le tampon est purgé explicitement en appelant fflush(stdout)

Ainsi, lorsqu'on écrit:

Code : C
1
2
printf("Entrez un entier :\n");
/* puis saisie */


On est assuré que l'invite sera affichée avant que la saisie n'ait lieu. Si par contre, on écrit:

Code : C
1
2
3
printf("Entrez un entier : ");
fflush(stdout);
/* puis saisie */


L'appel à fflush(stdout) est nécessaire pour s'assurer que la chaine "Entrez un entier : " soit affichée avant que la saisie n'ait lieu. Certains système purgent automatiquement le tampon du flux de sortie standard lorsqu'on effectue une saisie sur le flux d'entrée standard. Il est en général déconseillé de compter sur ce comportement. En terme de portabilité, c'est une bonne pratique d'appeler explicitement fflush() à chaque fois qu'on désire synchroniser l'affichage d'une invite et une opération de saisie.

Thierry

"Personne n'a jamais tout à fait tord. Même une horloge arrêtée donne l'heure juste deux fois par jour."

| FAQ-Python | FAQ-C - FAQ-c.l.c | FAQ-C++ - FAQ-Lite |
 
Hors ligne aska990 # Posté le 14/05/2008 à 12:09:48
Je vais manger moult frites !
Avatar
Groupe : Membres
Citation : guis
mais quand je tape une lettre ou un caractère comme le point la virgule...etc. Il boucle une boucle infinie c'est pour ça j'ai fait '1' et '50'



t'es aveugle ou quoi ? :p :

Citation : aska990
De toutes façon, en console, si l'utilisateur rentre des lettres au lieu de chiffres, le programme se met toujours à bugger




ceci dit la solution proposée est pas mal

mais en tout cas ça sert a rien de faire '1', '50'
Édité le 14/05/2008 à 12:15:57 par aska990
 
Hors ligne el-khawarrizmi # Posté le 15/05/2008 à 16:05:51
_____/'G|U|S/'______
Avatar
Groupe : Membres
tu ma pas compris j'ai cru quand je met '1' ou même 'a' il donne respectivement leur code ASCII

mais un grand merci à qui ma donner un coup de main

SVP, ne commanter pas sur mon français svp je sais qu'il est mal mais je vous assure que je fais des efforts. ^^
 

Retour au forum "Langage C" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 376 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.111s (0.0895s)