sakjimh
Messages postés13Date d'inscriptionjeudi 9 mars 2006StatutMembreDernière intervention31 décembre 2007
-
21 oct. 2006 à 20:04
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 2009
-
22 oct. 2006 à 19:03
salut
cette procedure est censée enregistrer un tableau et une valeur du compteur i:
void saisie(char x[L],int i)
{
for(i=0;x[i-1]!='\n';i++)
scanf("%c",&x[i]);
x[i]='\0';
}
mais quand je lance le programme il me donne une autre valeur pourquoi?
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 22 oct. 2006 à 19:03
Non non. Les dernières fonctions que je t'ai montré sont mieux. Elle permette d'utiliser ta fonction sur des chaines de taille variable (pas seulement de taille L) et évite les débordements tampon. Elle n'est pas plus compliqué à utiliser:
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 21 oct. 2006 à 20:20
Je ne comprend pas trop mais d'après ce que je comprend, tu veux ravoir le nombre de caractère écrit c'est bien ça? Dans ce cas, suffis de le renvoyer.
int saisie(char *x)
{
int i;
for(i=0;x[i-1]!='\n';i++)
scanf("%c",&x[i]);
x[i]='\0';
return i;
}
Je ne comprend pas bien le fonctionnement de ta fonction. Si tu veux une chaine de caractères, completement inutile de faire une fonction personnelle et d'appeller 40 fois scanf. Une fois suffit:
scanf("%s", buffer);
et si la taille est nécessaire, strlen fera l'affaire.
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 22 oct. 2006 à 04:47
Salut :
int Saisie (char str []) {
int n = 0;
while ((str [n++] = getchar ()) != '\n')
;
return n;
}
// Appel
int length;
char txt [256];
// ...
length = Saisie (txt);
Vous n’avez pas trouvé la réponse que vous recherchez ?
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 22 oct. 2006 à 17:41
Et puis d'ailleur, on ferait peut-être mieu d'ajouter une protection pour ne pas créé de bufer overflow.
Tu as deux choix: Tu peux faire la fonction de sorte que si tu dépasse le nombre de caractère, on coupe à la limite donc si tu tape "Bonjour" mais que le max est trois, ça donne "Bon":
int Saisie (char *str, int maxlen)
{
int n = 0;
sakjimh
Messages postés13Date d'inscriptionjeudi 9 mars 2006StatutMembreDernière intervention31 décembre 2007 22 oct. 2006 à 18:08
non non pas ça!!
j'ai compris le compilateur a confondu le i (compteur) avec la taille initiale L c'est vrais en algorithmique c'est pas comme en programmation surtout avec le C je suis habitué sur le pascal qui trés proche de l'algo il faut s'habitué
bon resoudre le probeme:
int saisie(char x[L])
{
int i;
for(i=0;x[i-1]!='\n';i++)
scanf("%c",&x[i]);
x[i]='\0';
return(i);
}
puis a l'appele s=(saisie(ch))il est obliger de saisir et renvoier la taille de la chaîne en meme temps
bon merci et desolé pour le dérongement