bonjour
quel est la difference entre %s et %c
dans le scanf
char c;
(ex: scanf("%c",&c");
scanf("%s",&c");
Version imprimable
bonjour
quel est la difference entre %s et %c
dans le scanf
char c;
(ex: scanf("%c",&c");
scanf("%s",&c");
bonjour
provoque un depassement de memoire.Code:
1
2 char c; scanf ("%s", &c);
%s pour lire une chaîne.
%c pour lire un caractère.
Donc, comprends ton erreur ici.Citation:
Envoyé par brakeche
qu est ce que tu veut dire pas depassement de memoire
Jveux dire que quand tu donnes un specificateur %s, il faut prevoir une zone suffisament grande pour que scanf puisse y stoquer tous les caracteres de la chaine saisie (+ le caractere nul)
En l'occurence, "c" ne tient que sur 1 caractere, donc scanf va commencer à ecrire à l'adresse de c puis va continuer dans la memoire en faisant n'importe quoi
moi dans mon programme j'utilise une variable c pour faire un test
car c l'utilisateur qui entre o( oui) s'il veut continuer ou n sil veut arreter
donc j'utilise quoi?
Alors, utilise
Attention, ici c est un int (fgetc retourne int)Code:c = fgetc(stdin);
tu veux bien m'expliquer le comportement de cette fonction dans le codeCitation:
Envoyé par Gruik
cf. man fgetc
fgetc lit un caractère dans le FILE * donné en argument et renvoie son code ASCII en sortie.
S'il y a erreur ou si la fin du fichier est atteinte, il renvoie EOF.
Pas suffisant. Pour un "o/n", il faut taperCitation:
Envoyé par Gruik
o<enter> ou n<enter>. Il faut donc 2 lectures, sinon, on se retrouve encore avec le problème du stdin non vide.
C'est pourquoi je préconise dans tous les cas d'utiliser fgets(), comme expliqué ici :
http://emmanuel-delahaye.developpez....tes.htm#saisie
http://emmanuel-delahaye.developpez....s.htm#fichiers
Code:
1
2
3
4 char line [4]; fgets(line, sizeof line, stdin); c = line[0]; /* ou *line */
http://emmanuel-delahaye.developpez.com/notes.htm#fgetcCitation:
Envoyé par lucky31
Au temps pour moi.Citation:
Envoyé par Emmanuel Delahaye
Dans ce cas la, il peut rester avec son scanf("%c", &c);
ça sera ptet plus simple
Ben non, ce sera le même problème...Citation:
Envoyé par Gruik
Oui, il faut toujours appuyer sur O ou N + entrée mais yaura pas à vider stdin (enfin j'espere)
S'il veut faire des E/S par la suite, si, c'est inévitable.Citation:
Envoyé par Gruik
De toute façon, on fait toujours place nette lorsqu'on joue avec sdtin.
Ok, désolé
:arf:
Comment tu fait tes scanf toi?Citation:
Envoyé par brakeche
moi je fait plutot:Efin je pensse que c'est un erreur de phape...Code:scanf("%c",&c);
"Prenez le temps d'aller lentement..."Citation:
Envoyé par miron
Comme disait mon grand-père qui était toujours à l'heure :
"Quand tu es pressé, va lentement"
A moins de rentrer 0.:mouarf:Citation:
Envoyé par Gruik
Et comment j'arrive a l'heure?:lol:Citation:
Envoyé par Emmanuel Delahaye