[newbie en C] Utilisation de getchar() avec scanf

clampin

Membre expert
Club iGen
22 Septembre 2000
1 002
177
54
Louvain-La-Neuve, Belgique
www.clampin.com
Bonjour,
Je continue a jouer un peu avec le C (non, je ne suis pas découragé)....
j'ai fait ce week-end deux exercices de mon bouquin, et j'ai un truc bizarre avec getchar().
En fait je veux que l'utilisateur appuye sur une touche pour quitter le programme. Truc à priori très con....
On me dit dans ce cas d'utiliser getchar() présente dans stdio.h.
Alors voilà j'ai donc un code suivant :
Bloc de code:
#include <stdio.h>
int main()
{
 int multi[2][4]; //définition d'un tableau à 2 dimensions
 // on affiche la taille des tableaux
 
 printf("\nLa taille de multi est égale à %u", sizeof(multi));
 printf("\nLa taille de multi[0] est égale à %u", sizeof(multi[0]));
 printf("\nLa taille de multi[0][0] est égale à %u", sizeof(multi[0][0]));
 printf("\n");
 
 getchar();  // on attends que l'utilisateur tape sur une touche
 
 return 0;  // on quitte
}
et avec ce code getchar() fonctionne bien
par contre avec cet exemple plus con...
Bloc de code:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
 
 float pi=3.1415;
 float rayon;
 
 printf("Rayon du cercle ? (par exemple : 15.00)\n");
 scanf("%f", &rayon);
 
 rayon=rayon * pi;
 
 printf("\nTotal %.4f\n",rayon);
 printf("\n");
 
 getchar();
 
 return 0;
}
Par contre ici, ça ne marche pas... mon programme quitte tout seul.
J'avoue que ça me perturbe.
 
Bonjour,
Je continue a jouer un peu avec le C (non, je ne suis pas d&#233;courag&#233;)....
j'ai fait ce week-end deux exercices de mon bouquin, et j'ai un truc bizarre avec getchar().
... ontre ici, &#231;a ne marche pas... mon programme quitte tout seul.
J'avoue que &#231;a me perturbe.
Bloc de code:
#exercice 1

#include <stdio.h>
int main(void)
{
    int ch, i = 0;
    while((ch = getchar()) != EOF)
    {
        i ++;
        printf("%d\n", i);
    }

    return (0);
}

#exercice 2

#include <stdio.h>
int main(void)
{
    int ch, i = 0;
    
    while( (ch =  getchar()) != EOF)
    {
        printf("-- %i --\n",ch);
        if(ch == 10)
            break;
        i ++;
        printf("%d\n", i);
    }

    return (0);
}

#exercice 3

#include <stdio.h>
int main(void)
{
    int ch, i = 0;
    ch = getchar();

    while(ch != EOF)
    {
        i ++;
        printf("%d\n", i);
    }

    return (0);
}
man 3 getchar
int getchar();

so, getchar returns something

:zen:
 
(je suis pas s&#251;r mais)

je crois qu'en fait c'est le scanf qui enregistre la chaine que tu tape jusqu'&#224; ce que tu tape "entr&#233;" non inclus.

Sauf que du coup le "entr&#233;" est dans le tampon et le getchar le prend pour lui en fait.

et il n'y a pas de scanf dans ton premier exemple, d'o&#249; la diff&#233;rence :)

:zen:
 
Bloc de code:
#exercice 1

#include <stdio.h>
int main(void)
{
    int ch, i = 0;
    while((ch = getchar()) != EOF)
    {
        i ++;
        printf("%d\n", i);
    }

    return (0);
}

#exercice 2

#include <stdio.h>
int main(void)
{
    int ch, i = 0;
    
    while( (ch =  getchar()) != EOF)
    {
        printf("-- %i --\n",ch);
        if(ch == 10)
            break;
        i ++;
        printf("%d\n", i);
    }

    return (0);
}

#exercice 3

#include <stdio.h>
int main(void)
{
    int ch, i = 0;
    ch = getchar();

    while(ch != EOF)
    {
        i ++;
        printf("%d\n", i);
    }

    return (0);
}
man 3 getchar
int getchar();

so, getchar returns something

:zen:
c malin l'exercice 3 une boucle infinie
et vous trouver cela drole ?
:D :D
au piquet :D :D
 
oui en effet l'important c'est d'observer le contenu de getchar
c'est juste un probleme de rester dans une boucle
(scanf)

le second programme enregistre bien getchar
puis apres il continu donc exit de suite