l_seringa Posté(e) le 3 avril 2006 Partager Posté(e) le 3 avril 2006 salut tout le monde.moi je suis nouvelle dans ce forum et j'aimerai bien retrouvé des réponses a mon problemes,et merci d'avance. ok maintenant je vais posé mon probleme. j'ai écrit un programme en c et je le compile en dev c++ alors je voudrais affiché des tableaux qui sont nommés(l0,l1,l2) alors tout s'affiche bien sauf que le dernier(l2) m'affiche un manque qui veut dire qu'il m'affiche pas du tt l2[0] ;il m'ecrit l2[0]= et rien ne s'affiche alors que la suite 'affiche le plus normal possible.alors pourquoi? et ben c ca la questio et merci 'avance Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 3 avril 2006 Partager Posté(e) le 3 avril 2006 tu peux poster le code de ta boucle d'affichage entre balise , s'il te plaît ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
l_seringa Posté(e) le 3 avril 2006 Auteur Partager Posté(e) le 3 avril 2006 [MODO] Post édité par le modo pour remettre les balises "code" dans le bon sens. On est prié de relire ses posts, c'est le minimum si on attend une réponse... #include<stdio.h> #include<stdlib.h> main() { int r,i,j,k,ns,x,nsuc,l1[100]; char l0[100],l2[100],s,suc; k=0; x=0; printf("entrer le nbre de sommets:\n"); scanf("%d",&ns); if(ns>100) printf("depassement de capacité\n"); else { if(ns<=0) printf("erreur"); else { for(i=0;i<ns;i++) { printf("entrer le sommet:\n"); scanf("%s",&s); l0[i]=s; printf("entrer le nbre de successeur:\n"); scanf("%d",&nsuc); if(nsuc>0) { x=k+nsuc-1; for(j=k;j<=x;j++) { printf("entrer le succeseur:\n"); scanf("%s",&suc); l2[j]=suc; l1[i]=k; } k=l1[i]+nsuc; } else { l2[k]='*'; l1[i]=k; k=k+1; } } } if(nsuc!=0) l1[ns]=nsuc+l1[ns-1]; else l1[ns]=l1[ns-1]+1; printf("**************************affichage des listes******************************\n"); printf("\n"); printf("**************************affichage des sommets******************************\n"); printf("\n"); for(i=0;i<ns;i++) printf(" l0[%d] = %c", i , l0[i]); printf("\n"); system("PAUSE"); printf("**************************affichage des adresse de successeurs******************************\n"); printf("\n"); for(j=0;j<=ns;j++) printf(" l1[%d] = %d", j , l1[j]); printf("\n"); system("PAUSE"); printf("**************************affichage des successeurs******************************\n"); printf("\n"); for(r=0;r<k;r++) printf(" l2[%d] = %c", r , l2[r]); printf("\n"); system("PAUSE"); } } Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 3 avril 2006 Partager Posté(e) le 3 avril 2006 oula... tu as plein de test conditionnels inutiles genre if( truc) printf("erreur\n"); else { //corps du programme } return 0; c'est absolument pas lisible. Essayes plutôt : if( condition) { printf("erreur\n"); exit(-1); } //corps du programme return 0; EDIT 1 : char l0[100]; ... printf("entrer le sommet:\n"); scanf("%s", &s); l0[i] = s; ça, ça ne marche pas... ou du moins, pas comme tu le penses, à mon avis. I0 est un char, dans lequel tu essayes de faire entrer une chaine de caractère (un char*, donc). la bone syntax pour scanf("%s") est systématiquement la suivante : char * buf; buf = (char*) malloc(sizeof(char)*25); scanf("%s", buf); ou bien char buf[25]; scanf("%s", buf); sachant que la chaine sera d'une taille max de 25 caractères. dans le cas où tu veux faire un tableau de chaines de caractère, et bien il te faut un char**, comme ici : char** buf; ... buf[i] = (char*) malloc(sizeof(char)*25); scanf("%s", buf[i]); EDIT 2: dans ton cas, je pense que le nom de tes sommets n'est que un seul char, donc au lieu de scanf("%s", &s); il te faut plutôt scanf(" %c", &s) oui, on met " %c" et non pas "%c" à cause d'une sombre histoire de buffeur. Pour faire plus simple, quand il te faut un caractère, utilise getc : s = getc(); Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 3 avril 2006 Partager Posté(e) le 3 avril 2006 en retouchant un peu ton code avec les indications que je t'ai données, voilà ce que j'obtiens : $ ./truc2 entrer le nbre de sommets: 3 entrer le sommet: a entrer le nbre de successeur: 1 entrer le succeseur: b entrer le sommet: b entrer le nbre de successeur: 1 entrer le succeseur: c entrer le sommet: c entrer le nbre de successeur: 1 entrer le succeseur: a **************************affichage des listes****************************** **************************affichage des sommets****************************** l0[0] = a l0[1] = b l0[2] = c **************************affichage des adresse de successeurs****************************** l1[0] = 0 l1[1] = 1 l1[2] = 2 l1[3] = 3 **************************affichage des successeurs****************************** l2[0] = b l2[1] = c l2[2] = a j'imagine que c'est le résultat que tu voulais, non ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 3 avril 2006 Partager Posté(e) le 3 avril 2006 Tiens pas mal, je ne connaissait pas le coup du " %c" Lien vers le commentaire Partager sur d’autres sites More sharing options...
naparuba Posté(e) le 5 avril 2006 Partager Posté(e) le 5 avril 2006 Tiens pas mal, je ne connaissait pas le coup du " %c" Pareil, bon à savoir, merci lorinc. Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 5 avril 2006 Partager Posté(e) le 5 avril 2006 c'est fou ce qu'on peut apprendre comme truc grâce aux étudiants qui font toujours la solution la plus bordelique... Lien vers le commentaire Partager sur d’autres sites More sharing options...
l_seringa Posté(e) le 5 avril 2006 Auteur Partager Posté(e) le 5 avril 2006 slt une autre fois et merci pour votre aide mais seulement moi kon j met le %c a la place de %s ca m'affiche ce entrer le sommet entrer le nbre e successeur et en plus le s=getc() m'affiche c erreurs too few argument to function'int getc(FILE*) alors je comprend rien et merci. Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 5 avril 2006 Partager Posté(e) le 5 avril 2006 c'est bien pour ça que je disais " %c" avec un espace avant le % sinon, pour getc(), merci microsoft... c=getc(stdin) devrait résoudre le problème, sinon c=getchar() Lien vers le commentaire Partager sur d’autres sites More sharing options...
l_seringa Posté(e) le 5 avril 2006 Auteur Partager Posté(e) le 5 avril 2006 merci beuacoup.vous m'aviez tres bien resolu mo probleme c magnifique ce forum et l'espace avant le %c ca c kelke chose en plus pour moion apprend toujour avec vous merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 5 avril 2006 Partager Posté(e) le 5 avril 2006 Tu peux relire ce que tu poste stp ? au passage Lien vers le commentaire Partager sur d’autres sites More sharing options...
Soulfly_tribe90 Posté(e) le 5 avril 2006 Partager Posté(e) le 5 avril 2006 C'est quoi cette histoire d'espace avant %c :o J'ai jamais eu de probleme... Et sinon avec un scanf("%s",variable) --> on met pas &variable logiquement... Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 6 avril 2006 Partager Posté(e) le 6 avril 2006 en fait ça arrive quand tu fais une séquence tu type : printf("entrez choix 1\n"); scanf("%c", &buf1); printf("entrez choix 2\n"); scanf("%c", &buf2); lors du premier scanf, il y a "x\n" dans le buffer d'entrée, et scanf récupère le 'x' pour le mettre dans buf1, mais ne vide pas le buffer d'entrée. Du coup lors du second scanf, il y a "\nx\n" dans le buffer d'entrée, et scanf récupère '\n' et le met dans buf2, laissant "x\n" dans le buffer d'entrée, etc, etc... ça n'arrive jamais parce qu'un est de gros fainéant qui préferrons getc() plutôt que scanf("%c"), voilà Lien vers le commentaire Partager sur d’autres sites More sharing options...
Soulfly_tribe90 Posté(e) le 6 avril 2006 Partager Posté(e) le 6 avril 2006 Ouai je vois tres bien ce que tu veux dire en fait Moi je ferais dans ce cas un fflush(stdin) pour vider le buffer clavier dans ce cas Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 6 avril 2006 Partager Posté(e) le 6 avril 2006 Pas en c. Moi j'ai toujours mon while((c=getchar())=='\n') qui m'a fidèlement servit. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 6 avril 2006 Partager Posté(e) le 6 avril 2006 pas !='\n' plutôt ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 6 avril 2006 Partager Posté(e) le 6 avril 2006 Non tant que c'est '\n', on n'en veut pas, dont on continue la boucle (donc le getchar), jusqu'à avoir un caractère différent de '\n' Alors on trolle sur perl, mais un petit until serait un peu plus intuitif pour le coup Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 6 avril 2006 Partager Posté(e) le 6 avril 2006 Ah oui pour vider le buffer, pas pour lire des caractères sur stdin... j'ai lu en diagonale, honte à moi Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.