Aller au contenu

un petit pb en c


Messages recommandés

:transpi: 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

[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

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]);

:D

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

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 ?

:craint:

Lien vers le commentaire
Partager sur d’autres sites

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

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à :francais:

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...