Problème en C

Résolu/Fermé
martur - 11 déc. 2010 à 23:12
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 11 déc. 2010 à 23:51
Bonjour,

je suis nulle en programmation c,j'ai voulu creer un tableau de caractère.(ça parait trop simple).alors j'ai fait les lignes suivantes:

char t[20];
int n;
printf ( " donner la taille du 1er tableau\n");
scanf("%d",&n);

for (i=0 ; i<n ; i++)
{

printf("donner l'element %d ",i);
scanf("%c",&t[i]);

}



le problème c'est que lors de l'exécution ,j'ai l'affichage suivant
"donner la taille du 1er tableau"..alors je donne la taille du tableau par exemple 7
donner l'element 0 donner l'element 1
lc'est à dire il me donne la main seulement pour faire entrer la deuxieme valeaur...et aprés il m'affiche
donner l'element 2 donner l'element 3 ...je tape la valeaur 3..et puis
donner l'element 4 donner l'element 5 ....et ainsi de suite


sachant que tout va bien si je change vers un tableau d'entiers,je sais pas ce qui ce passe pour ce tableau de caractères..

aidez moi s'il vous plait




2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
11 déc. 2010 à 23:29
Bonjour,

Lorsque tu tapes un caractère et que tu valides par entrée, tu as l'impression d'avoir tapé un caractère, mais tu en as tapé en fait deux. Le second correspond au code de la touche entrée ('\n'). C'est ce dernier qui te fait sauter les cases du tableau.

Pour corriger, il suffit d'insérer un simple getchar(); après le scanf("%c",&t[i]);
D'ailleurs plutôt qu'un scanf("%c",&t[i]); t'aurais pu mettre t[i]=getchar();

Sinon pour information, tu peux mettre directement scanf("%19s",t); au lieu de mettre une boucle for / scanf.

Cdlt,
0
merci fiddy..
0
redaTDI Messages postés 30 Date d'inscription samedi 2 octobre 2010 Statut Membre Dernière intervention 9 novembre 2012 3
11 déc. 2010 à 23:45
et aussi il est mieux d 'utilisé la fonction gets(t) pour lire la chaine à la place de scanf. cette fonction est utilitaire au tableau de chaine de caractere...
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
Modifié par fiddy le 12/12/2010 à 00:02
aussi il est mieux d 'utilisé la fonction gets(t) pour lire la chaine à la place de scanf
Certainement pas. gets() est obsolète car non sécurisé.
Il vaut mieux utiliser fgets qui permet d'indiquer la taille de la chaîne maximum, ce qui évite la réécriture de la pile.
0