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
Comment tu fais ?Citation:
Envoyé par seriousme
Excellente question, je ne sais pas si il est possible d'écrire sur le flux "stdin" directement.Citation:
Envoyé par Emmanuel Delahaye
Peut être en redirigeant depuis un fichier texte contenant un 0...Citation:
Envoyé par seriousme
Code:$ myapp < zero.txt
Et après dans le prog, comment faire pour que le 0 soit mit sur le flux stdin?Citation:
Envoyé par Emmanuel Delahaye
bah scanf le fait tout seul ,)
euh, je veux dire, le systeme met ce qu'il faut dans stdin quoi
En effet.
Comment se fait ce?
bah c'est l'operateur "<" qui fait ça
Si on avait fait
ce qu'aurait ecrit programme sur la sortie standard serait redirigé sur le fichier donnéCode:./programme > fichier.txt
opérateur... T'y vas fort... La "commande d'indirection"...Citation:
Envoyé par Gruik
Le man parle "d'operateur de redirection"
http://man.developpez.com/man1/bash.1.php#L32
Bon, peut être... De toutes façons, c'est pas du C, on s'en tape...Citation:
Envoyé par Gruik