Aller au contenu

besoin d'aide en dev c++

Featured Replies

Posté(e)

slt tout le monde.j'ai vraiment besoin de votre aide.je suis une etudiante en informatique et je debute a peine de programmer en dev c++.alors j'ai ecris un programme pr saisir un graphe .et le probleme c'et que a chaque fois ke j'excute comme si la boucle "for" est indifinie.alors si vous voulé je vous ecris le programme et vous esssayé e m'aider .merci

Posté(e)

Je pense qu'on pourrait essayer de t'aider si :

1. Tu t'exprimais correctement

2. Tu postais le code incorrect

En l'absence de ces deux éléments, on ne peut rien pour toi !

Posté(e)

Petite précision, Dev C++ est un logiciel pour programmer en C/C++, donc tu ne programmes pas en "dev c++" mais en C ou en C++.

Ensuite une boucle for "indifinie" ca existe pas, soit t'as voulu dire infinie, donc tu as un problème avec ta condition d'arrêt, soit tu as voulu dire indéfinie et une boucle for indéfinie ca existe pas...

Le ton à l'air un peu sec mais ca reflète pas ce que je pense t'inquiète pas, faut juste que tu précises plus ta question, en nous donnant un bout de code par exemple.

Posté(e)
  • Auteur

Petite précision, Dev C++ est un logiciel pour programmer en C/C++, donc tu ne programmes pas en "dev c++" mais en C ou en C++.

Ensuite une boucle for "indifinie" ca existe pas, soit t'as voulu dire infinie, donc tu as un problème avec ta condition d'arrêt, soit tu as voulu dire indéfinie et une boucle for indéfinie ca existe pas...

Le ton à l'air un peu sec mais ca reflète pas ce que je pense t'inquiète pas, faut juste que tu précises plus ta question, en nous donnant un bout de code par exemple.

ok merci alors je vais te donner tout mon code en t'expliquant le probleme.moi je programme avec c mais je compile en devc++.je doit saisir un graphe

alors je doit mettre les sommets dans un tableau tel que L0

et les successeurs de chaque sommets dans un autre tableau tel queL2

et le adresse des du premier successeurs de chaque sommets dansL1

alors tout marche bien sauf dans quelues boucle ou j'ai preciser le probleme dans des commentaire

alors si vous pouvais m'aider et ben merci d'avance

#include<stdio.h>

main()

{

int i,j,k,x,ns,nsuc,l1[100];

char l0[100],l2[100];

k=0;

printf("entrer le nbre e sommets:\n");

scanf("%d",&ns);

if(ns>100)

printf("erreur\n");

else

{

for(i=0;i<ns;i++)

{

printf("entrer le sommet:\n");

scanf("%a",&l0);

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");/*cette boucle ne 'arrete pas en m'affichant sans s'arret le mesage*/

scanf("%a",l2[j]);

l1=k;

k=l1+nsuc;

else

l2[k]='*';/*en cas de else elle me dit de rentrer le sommet puis la fenetre du dos sort*/

l1=k;

k=k+1;

}

l1[ns]=nsuc+l1[ns-1]+1;

}

}

et merci

Posté(e)
scanf("%a",&l0);
Pour un caractère c'est %c, mais tu ne peux pas faire comme ça de toutes façons tu aura un \n dans le buffer. Il faut le vider après.

Utilise getchar plutôt.

if(nsuc!=0)

x=k+nsuc-1;

Attention si nscu=0 au premier tour, x ne sera pas initialisé et c'est dangereux.
for(j=k;j<=x;j++)

printf("entrer le succeseur:\n");/*cette boucle ne 'arrete pas en m'affichant sans s'arret le mesage*/

scanf("%a",l2[j]);

l1=k;

k=l1+nsuc;

Il manque peut être des accolades pour arrêter ton for au bon endroit non ?

Je n'ai pas regardé le reste.

Posté(e)

Un petit conseil, met ton code entre les balises


comme ca si tu l'as indenté ca gardera l'indentation parce que la ca complique un peu...

Posté(e)
  • Auteur
scanf("%a",&l0);
Pour un caractère c'est %c, mais tu ne peux pas faire comme ça de toutes façons tu aura un \n dans le buffer. Il faut le vider après.

Utilise getchar plutôt.

if(nsuc!=0)

x=k+nsuc-1;

Attention si nscu=0 au premier tour, x ne sera pas initialisé et c'est dangereux.
for(j=k;j<=x;j++)

printf("entrer le succeseur:\n");/*cette boucle ne 'arrete pas en m'affichant sans s'arret le mesage*/

scanf("%a",l2[j]);

l1=k;

k=l1+nsuc;

Il manque peut être des accolades pour arrêter ton for au bon endroit non ?

Je n'ai pas regardé le reste.

merci pour ca mais ca reste toujours le probleme.je suis un peu debutante en c et je doit rendre ce projet cette semaine alors j'ai vraimnt besoin de si quelqu'un peut m'aider car j'ai eu marre e ce tp.alors svp si je pourrais vous enner tres bien l'enoncé de ce tp et me le corrigé.merci d'avance.

ou doit je mettre le getchar.?merci

Posté(e)

On veut bien t'aider mais faut que tu nous dises si tu as encore des problèmes après les corrections proposées par théocrite et si oui lesquels en nous postant le code et le problème rencontré.

Posté(e)
je pourrais vous enner tres bien l'enoncé de ce tp et me le corrigé.merci d'avance.
:francais:

Relis toi stp, c'est vraiment pas facile de te comprendre.

Ce serait bien que tu colle ton code (entre des balises [ CODE]) et que tu nous dise ce qui fonctionne ce qui ne fonctionne pas, ce que tu tentais de faire et comment tu pensait le faire.

Posté(e)

main()
{
  int i,j,k,x,ns,nsuc,l1[100];
  char l0[100],l2[100];

  k=0;
  printf("entrer le nbre e sommets:\n");
  scanf("%d",&ns);

  if(ns>100)
  {
  printf("erreur\n");
  }
  else
  {
  for(i=0;i<ns;i++)
  {
	 printf("entrer le sommet:\n");
	 scanf("%a",&l0[i]);
	 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");/*cette boucle ne 'arrete pas en m'affichant sans s'arret le mesage*/

	 scanf("%a",l2[j]);
	 l1[i]=k;
	 k=l1[i]+nsuc;

	 else
		l2[k]='*';/*en cas de else elle me dit de rentrer le sommet puis la fenetre du dos sort*/

	 l1[i]=k;
	 k=k+1;
  }
  l1[ns]=nsuc+l1[ns-1]+1;
  }
}

Je pense que comme ca il est plus lisible...

	 for(j=k;j<=x;j++)
		 printf("entrer le succeseur:\n");/*cette boucle ne 'arrete pas en m'affichant sans s'arret le mesage*/

Ici vu que tu ne met pas d'accolades ta boucle for n'execute que cette ligne en boucle jusqu' a ce que j soit plus grand que x.

	 if(nsuc!=0)
		 x=k+nsuc-1;
	 ...
	 else
		l2[k]='*';/*en cas de else elle me dit de rentrer le sommet puis la fenetre du dos sort*/

Est ce que ce ELSE depend de ce IF? Si oui alors tu devrais avoir ca:

	 if(nsuc!=0)
	 {
		 x=k+nsuc-1;
		 ...
	 }
	 else
		l2[k]='*';/*en cas de else elle me dit de rentrer le sommet puis la fenetre du dos sort*/

Quelques autres conseils:

main()
{
  // Sépare tes variables histoire d'avoir un programme lisible, si un jour tu dois le reutiliser il te faudra lire tout ton programme pour savoir a quoi servent tes variables */
  int i,j,k=0,x;
  int ns=0; /* Nombre de sommets */
  int nsuc; /* Nombre de successeurs */
  int l1[100];
  char l0[100],l2[100];

  printf("Entrez le nombre de sommets:\n");
  scanf("%d",&ns);

  if(ns>100)
  {
  printf("Nombre de sommets trop grand!\n");
  return;
  } /* etant donné que si ce nombre est trop grand ton programme ne fait plus rien tu peut le quitter comme ca */

  for(i=0;i<ns;i++)
  {
  printf("entrer le sommet:\n");
  scanf("%a",&l0[i]);
  printf("entrer le nbre de successeur:\n");
  scanf("%d",&nsuc);

  if(nsuc!=0) /* ce IF ne lance qu'une ligne de programme et ne laisse pas de place à un else */
	  x=k+nsuc-1;

  for(j=k;j<=x;j++)
  {
	  printf("Entrez le successeur:\n"); /*cette boucle ne 'arrete pas en m'affichant sans s'arret le mesage*/
  } /* Cette accolade bien qu'elle ne soit pas dans ton programme existe et ne laisse qu'une ligne de programme dans la boucle for... tu devrais la descendre là ou elle devrais être */

  scanf("%a",l2[j]);
  l1[i]=k;
  k=l1[i]+nsuc;

  else /* ce ELSE ne depend de rien si tu veix qu'il depende du if ajoute des {} */
	 l2[k]='*';/*en cas de else elle me dit de rentrer le sommet puis la fenetre du dos sort*/

  l1[i]=k;
  k=k+1;
  }
  l1[ns]=nsuc+l1[ns-1]+1;
}

Tu devrais prendre l'habitude dès maintenant de faire des programmes lisibles.. en cas d'erreur tu voit tout de suite ce qui ne va pas! par exemple les {} manquantes. Si tu tries des le depart tes variables tu pourra t'y retrouver dans ton programme en le debuguant. Essaie aussi de donner une valeur a tes variables dès le début (ce n'est aps obligatoires mais c'est mieux).

Tu ne peux utiliser un ELSE avec un IF que dans deux conditions:

  IF test1
  {
   ligne de code 1;
   ligne de code 2;
   ligne de code 3;
   ...
  }
  ELSE
  {
  ...  /* une ou plusieurs ligen de code (si une seule alors les accolades ne sont pas necessaires */
  }

ou bien

  IF test1
   ligne de code; //une seule ligne de code
  ELSE
  {
  ...  /* une ou plusieurs ligen de code (si une seule alors les accolades ne sont pas necessaires */
  }

Dans le deuxieme cas si tu met plus d'une ligne de code entre le IF et le ELSE alors ce ELSE ne sert à rien puisque non utilisé. Je m'etonnes que ton compilateur ne t'ai pas sorti d'erreur par ailleurs...

Voilà ton programme n'est pas corrigé mais je pense qu'avec ca tu devrais pouvoir le faire par toi même. Ce qui est toujours mieux! :)

Posté(e)
  • Auteur

main()
{
  int i,j,k,x,ns,nsuc,l1[100];
  char l0[100],l2[100];

  k=0;
  printf("entrer le nbre e sommets:\n");
  scanf("%d",&ns);

  if(ns>100)
  {
  printf("erreur\n");
  }
  else
  {
  for(i=0;i<ns;i++)
  {
	 printf("entrer le sommet:\n");
	 scanf("%a",&l0[i]);
	 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");/*cette boucle ne 'arrete pas en m'affichant sans s'arret le mesage*/

	 scanf("%a",l2[j]);
	 l1[i]=k;
	 k=l1[i]+nsuc;

	 else
		l2[k]='*';/*en cas de else elle me dit de rentrer le sommet puis la fenetre du dos sort*/

	 l1[i]=k;
	 k=k+1;
  }
  l1[ns]=nsuc+l1[ns-1]+1;
  }
}

Je pense que comme ca il est plus lisible...

	 for(j=k;j<=x;j++)
		 printf("entrer le succeseur:\n");/*cette boucle ne 'arrete pas en m'affichant sans s'arret le mesage*/

Ici vu que tu ne met pas d'accolades ta boucle for n'execute que cette ligne en boucle jusqu' a ce que j soit plus grand que x.

	 if(nsuc!=0)
		 x=k+nsuc-1;
	 ...
	 else
		l2[k]='*';/*en cas de else elle me dit de rentrer le sommet puis la fenetre du dos sort*/

Est ce que ce ELSE depend de ce IF? Si oui alors tu devrais avoir ca:

	 if(nsuc!=0)
	 {
		 x=k+nsuc-1;
		 ...
	 }
	 else
		l2[k]='*';/*en cas de else elle me dit de rentrer le sommet puis la fenetre du dos sort*/

Quelques autres conseils:

main()
{
  // Sépare tes variables histoire d'avoir un programme lisible, si un jour tu dois le reutiliser il te faudra lire tout ton programme pour savoir a quoi servent tes variables */
  int i,j,k=0,x;
  int ns=0; /* Nombre de sommets */
  int nsuc; /* Nombre de successeurs */
  int l1[100];
  char l0[100],l2[100];

  printf("Entrez le nombre de sommets:\n");
  scanf("%d",&ns);

  if(ns>100)
  {
  printf("Nombre de sommets trop grand!\n");
  return;
  } /* etant donné que si ce nombre est trop grand ton programme ne fait plus rien tu peut le quitter comme ca */

  for(i=0;i<ns;i++)
  {
  printf("entrer le sommet:\n");
  scanf("%a",&l0[i]);
  printf("entrer le nbre de successeur:\n");
  scanf("%d",&nsuc);

  if(nsuc!=0) /* ce IF ne lance qu'une ligne de programme et ne laisse pas de place à un else */
	  x=k+nsuc-1;

  for(j=k;j<=x;j++)
  {
	  printf("Entrez le successeur:\n"); /*cette boucle ne 'arrete pas en m'affichant sans s'arret le mesage*/
  } /* Cette accolade bien qu'elle ne soit pas dans ton programme existe et ne laisse qu'une ligne de programme dans la boucle for... tu devrais la descendre là ou elle devrais être */

  scanf("%a",l2[j]);
  l1[i]=k;
  k=l1[i]+nsuc;

  else /* ce ELSE ne depend de rien si tu veix qu'il depende du if ajoute des {} */
	 l2[k]='*';/*en cas de else elle me dit de rentrer le sommet puis la fenetre du dos sort*/

  l1[i]=k;
  k=k+1;
  }
  l1[ns]=nsuc+l1[ns-1]+1;
}

Tu devrais prendre l'habitude dès maintenant de faire des programmes lisibles.. en cas d'erreur tu voit tout de suite ce qui ne va pas! par exemple les {} manquantes. Si tu tries des le depart tes variables tu pourra t'y retrouver dans ton programme en le debuguant. Essaie aussi de donner une valeur a tes variables dès le début (ce n'est aps obligatoires mais c'est mieux).

Tu ne peux utiliser un ELSE avec un IF que dans deux conditions:

  IF test1
  {
   ligne de code 1;
   ligne de code 2;
   ligne de code 3;
   ...
  }
  ELSE
  {
  ...  /* une ou plusieurs ligen de code (si une seule alors les accolades ne sont pas necessaires */
  }

ou bien

  IF test1
   ligne de code; //une seule ligne de code
  ELSE
  {
  ...  /* une ou plusieurs ligen de code (si une seule alors les accolades ne sont pas necessaires */
  }

Dans le deuxieme cas si tu met plus d'une ligne de code entre le IF et le ELSE alors ce ELSE ne sert à rien puisque non utilisé. Je m'etonnes que ton compilateur ne t'ai pas sorti d'erreur par ailleurs...

Voilà ton programme n'est pas corrigé mais je pense qu'avec ca tu devrais pouvoir le faire par toi même. Ce qui est toujours mieux! :)

merci ca m'a vraiment aider.j'ai voulu seulement préciser que je les exécuter sur boorland c++ et je les bien modifier et ben tout marche bien.o merveille sauf qu'il faut que j'affiche tout mes tableau et il ya toujours un msg ui apparait c

linker warning:no module definition file specified:using default.et

ca c on cas d'affichage.merci si vou connaisait la reponse.

ah oui comment ca faire mon programme entre les balises.merci

Posté(e)

linker warning:no module definition file specified:using default.et

ca c on cas d'affichage.merci si vou connaisait la reponse.

ah oui comment ca faire mon programme entre les balises.merci

Les warnings ne sont pas des erreurs fatales.

Lorsque tu tape ton message sur PCI, tape

[ code ](sans les espaces entre les crochets
avant le code source et
[ /code ] (sans les espaces entre les crochets)
après, et ça sera un poil plus lisible.... :transpi:
Posté(e)
  • Auteur

linker warning:no module definition file specified:using default.et

ca c on cas d'affichage.merci si vou connaisait la reponse.

ah oui comment ca faire mon programme entre les balises.merci

Les warnings ne sont pas des erreurs fatales.

Lorsque tu tape ton message sur PCI, tape

[ code ](sans les espaces entre les crochets
avant le code source et
[ /code ] (sans les espaces entre les crochets)
après, et ça sera un poil plus lisible.... :D

bonjour.quesque ca veut dire mettre un programme entre les balises.

Posté(e)

Et si vraiment tu n'arrives pas à taper [ code ], il suffit de surligner le texte puis de cliquer sur le bouton représentant un dièse (#) dans la barre d'outils de formatage, quand tu écris ton post.

Rappelle-toi que plus ton post est clair et lisible, et mieux on pourra t'aider !

Archivé

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