-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"Mal nommer les choses c'est ajouter du malheur au monde." -- Albert Camus.
AG
Cohiba wrote:
J'aimerais lire une suite de doublet(int, char*) entree au clavier. Dans ma boucle, je fait
1) scanf("%d", valeur); pour lire l'entier
2) char * chaine; i = 0; while((chaine[i]=getchar())!='n') i++; pour lire ma chaine de caractere. Il te faut allouer de l'espace mémoire pour ta chaine.
par exemple, si tu es sur que la longueur de ta chaine ne dépasse pas 10 caractères :
char chaine[30]={0};
while(chaine[i]=getchar())!='n' && i<10) i++;
Cohiba wrote:
J'aimerais lire une suite de doublet(int, char*) entree au clavier.
Dans ma boucle, je fait
1) scanf("%d", valeur);
pour lire l'entier
2) char * chaine; i = 0;
while((chaine[i]=getchar())!='n')
i++;
pour lire ma chaine de caractere.
Il te faut allouer de l'espace mémoire pour ta chaine.
par exemple, si tu es sur que la longueur de ta chaine ne dépasse pas 10
caractères :
J'aimerais lire une suite de doublet(int, char*) entree au clavier. Dans ma boucle, je fait
1) scanf("%d", valeur); pour lire l'entier
2) char * chaine; i = 0; while((chaine[i]=getchar())!='n') i++; pour lire ma chaine de caractere. Il te faut allouer de l'espace mémoire pour ta chaine.
par exemple, si tu es sur que la longueur de ta chaine ne dépasse pas 10 caractères :
char chaine[30]={0};
while(chaine[i]=getchar())!='n' && i<10) i++;
jz
Cohiba wrote:
J'aimerais lire une suite de doublet(int, char*) entree au clavier. Dans ma boucle, je fait
1) scanf("%d", valeur); pour lire l'entier
scanf("%d", & valeur);
Il faut donner l'adresse de valeur (à moins que ta variable valeur soit un pointeur vers un entier qui existe quelque part)
Comme le dit ED, se méfier de scanf qui est vicieuse, et en plus l'utilisateur peut saisir autre chose qu'un entier juste pour t'embêter :(
2) char * chaine; i = 0; while((chaine[i]=getchar())!='n') i++; pour lire ma chaine de caractere.
a) scanf(..) laisse un 'n' ; b) chaine doit correspondre à une zone mémoire réservée, par un tableau ou malloc. c) Il ne faut pas déborder de cette zone mémoire. d) Il faut ajouter ' ' pour marquer la fin de la chaîne lue.
Exemple vite fait, à adapter selon que tu veuilles ou non garder le 'n' final et réagir correctement si la saisie est trop longue :
#define TAILLE 100 char chaine[TAILLE]; int valeur; int i=0; scanf("%d", & valeur); getchar(); /* pour virer 'n' */ while(i<TAILLE-1 && (chaine[i]=getchar())!='n')) i++; chaine[i] = ' ';
A+ Jacques
Cohiba wrote:
J'aimerais lire une suite de doublet(int, char*) entree au clavier.
Dans ma boucle, je fait
1) scanf("%d", valeur);
pour lire l'entier
scanf("%d", & valeur);
Il faut donner l'adresse de valeur (à moins que ta variable valeur
soit un pointeur vers un entier qui existe quelque part)
Comme le dit ED, se méfier de scanf qui est vicieuse, et en plus
l'utilisateur peut saisir autre chose qu'un entier juste pour t'embêter :(
2) char * chaine; i = 0;
while((chaine[i]=getchar())!='n')
i++;
pour lire ma chaine de caractere.
a) scanf(..) laisse un 'n' ;
b) chaine doit correspondre à une zone mémoire réservée, par un
tableau ou malloc.
c) Il ne faut pas déborder de cette zone mémoire.
d) Il faut ajouter ' ' pour marquer la fin de la chaîne lue.
Exemple vite fait, à adapter selon que tu veuilles ou non garder le
'n' final et réagir correctement si la saisie est trop longue :
#define TAILLE 100
char chaine[TAILLE];
int valeur;
int i=0;
scanf("%d", & valeur);
getchar(); /* pour virer 'n' */
while(i<TAILLE-1 && (chaine[i]=getchar())!='n'))
i++;
chaine[i] = ' ';
J'aimerais lire une suite de doublet(int, char*) entree au clavier. Dans ma boucle, je fait
1) scanf("%d", valeur); pour lire l'entier
scanf("%d", & valeur);
Il faut donner l'adresse de valeur (à moins que ta variable valeur soit un pointeur vers un entier qui existe quelque part)
Comme le dit ED, se méfier de scanf qui est vicieuse, et en plus l'utilisateur peut saisir autre chose qu'un entier juste pour t'embêter :(
2) char * chaine; i = 0; while((chaine[i]=getchar())!='n') i++; pour lire ma chaine de caractere.
a) scanf(..) laisse un 'n' ; b) chaine doit correspondre à une zone mémoire réservée, par un tableau ou malloc. c) Il ne faut pas déborder de cette zone mémoire. d) Il faut ajouter ' ' pour marquer la fin de la chaîne lue.
Exemple vite fait, à adapter selon que tu veuilles ou non garder le 'n' final et réagir correctement si la saisie est trop longue :
#define TAILLE 100 char chaine[TAILLE]; int valeur; int i=0; scanf("%d", & valeur); getchar(); /* pour virer 'n' */ while(i<TAILLE-1 && (chaine[i]=getchar())!='n')) i++; chaine[i] = ' ';
A+ Jacques
Vincent Lefevre
Dans l'article , Emmanuel Delahaye écrit:
scanf() n'est pas une fonction recommandée car difficile d'emploi. L'alternative est fgets() avec les fonctions de conversions qui vont bien...
fgets() n'est pas si pratique que ça si on veut prendre en compte les entrées tordues.