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



## clampin (16 Octobre 2006)

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 :

```
#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...

```
#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.


----------



## tatouille (16 Octobre 2006)

clampin a dit:


> 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.




```
#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


----------



## p4bl0 (16 Octobre 2006)

(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


----------



## APPLOLIVIER (16 Octobre 2006)

tatouille a dit:


> ```
> #exercice 1
> 
> #include <stdio.h>
> ...


c malin l'exercice 3 une boucle infinie
et vous trouver cela drole ?
  
au piquet


----------



## tatouille (16 Octobre 2006)

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


----------

