Menu

Comment empêcher la fonction de se répéter ? [Résolu]

Harvard226 6 Messages postés vendredi 12 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention - 13 janv. 2018 à 17:26 - Dernière réponse : Harvard226 6 Messages postés vendredi 12 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention
- 14 janv. 2018 à 00:24
Bonjour,
J'ai créé une fonction pour me permettre d'ajouter une classe ainsi que les renseignements qui vont avec (effectif et code de la classe ) dans un fichier nommé classe qu'elle (la fonction) crée elle. Mais après un premier tour (tout ce passe bien en ce moment là) elle recommence. Je n'ai pourtant pas utilisé de boucle.
Afficher la suite 

8 réponses

Répondre au sujet
NHenry 14132 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 21 avril 2018 Dernière intervention - 13 janv. 2018 à 17:39
0
Utile
Sans code impossible de répondre.
Commenter la réponse de NHenry
Harvard226 6 Messages postés vendredi 12 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention - 13 janv. 2018 à 18:31
0
Utile
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//renseignements sur les classes
struct classe
{
int num;
char nom[50];
int effec;
};
struct classe classes;

//fonction de recherche classe
int recherche_classe(int code)
{

FILE*classe ;
classe = fopen("classes.g11", "r");
if(classe !=NULL)
{
do
{
fscanf(classe,"%d ;%s ;%ld\n",&classes.num,&classes.nom,&classes.effec);
fflush(stdin);
if(classes.num== code)
{
fclose(classe);
return 1; 
}
}while(!feof(classe));
fclose(classe);
return 0;
}
}


//ajouter une classe
<gras>Void ajouter_classe()</gras>
{
FILE*classe;
int code;
/*char c;
c=';';*/
classe=fopen("classes.g11","a");
printf("\nentrez l'identifiant de la classe: ");
scanf("%d",&code);
fflush(stdin);

while(recherche_classe(code)==1)
{
printf("\ncette classe existe deja\n");
printf("entrer un nouvel identifiant");
scanf("%d",&code);
}
if(classe != NULL)
{
classes.num=code;
printf("%d\n",classes.num);
printf("\nentrer le nom de la classe: ");
//gets(classes.nom);
scanf("%s",classes.nom);
fflush(stdin);
printf("%s\n",classes.nom);
printf("\nentrer l'effectif de la classe:");
scanf("%d",classes.effec);
printf("%d\n",classes.effec);
fflush(stdin);

fprintf(classe,"%d ;%s ;%d\n",classes.num,classes.nom,classes.effec);
fflush(stdin);

fclose(classe);
}
}

//afficher la liste des classes
void affiche_classe()
{
FILE*classe =fopen("classes.g11", "r");
printf("la liste des classes est :\n\n");
printf("Code de la classe \t; nom de la classe\t; effectif de la classe\n");
if(classe!=NULL)
{
do
{
fscanf(classe,"%d ;%s ;%d\n",&classes.num,&classes.nom,&classes.effec);
fflush(stdin);
printf("%d\t ;%s\t ;%d\n",classes.num,classes.nom,classes.effec);
}
while (!feof(classe));
fclose(classe);
}
}


int main()
{
int choix;
char T;
do
{
printf("entrer 1 pour ajouter une classe\n");
printf("entrer 2 pour afficher la liste des classes\n");
printf("entrez votre choix: ");
scanf("%d",&choix);
while(choix>=1 && choix<=2)
{
switch(choix)
{
case 1:ajouter_classe();
break;
case 2:affiche_classe();
break;
}
}

printf("\nvoulez vous continuer O/N");
scanf("%s",&T);
fflush(stdin);
}
while(T=='o' ||T=='O');}
Commenter la réponse de Harvard226
pkpkmépkpk 352 Messages postés samedi 14 mai 2011Date d'inscription 5 avril 2018 Dernière intervention - 13 janv. 2018 à 22:51
0
Utile
5
Bonjour,

Je n'ai pourtant pas utilisé de boucle.
Bien sûr que si :
while(choix>=1 && choix<=2)
(l. 107).
Harvard226 6 Messages postés vendredi 12 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention - 13 janv. 2018 à 23:56
Oui mais apres l'appel de la fonction, après un premier tour la fonction est encore rappeler alors que normalement l'exécution devrait se poursuivre dans le int main.
pkpkmépkpk 352 Messages postés samedi 14 mai 2011Date d'inscription 5 avril 2018 Dernière intervention - 14 janv. 2018 à 00:02
L'exécution se poursuit bien dans main, mais dans la boucle
while
, donc elle est réexécutée.
Harvard226 6 Messages postés vendredi 12 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention - 14 janv. 2018 à 00:07
Dans ce cas là ne devrait-on pas me proposer normalement d'entrer 1 pour ajouter une classe et 2 pour afficher la liste des classes. ?
pkpkmépkpk 352 Messages postés samedi 14 mai 2011Date d'inscription 5 avril 2018 Dernière intervention - 14 janv. 2018 à 00:08
Non puisque ces instructions sont hors de la boucle
while
.
Harvard226 6 Messages postés vendredi 12 janvier 2018Date d'inscription 14 janvier 2018 Dernière intervention - 14 janv. 2018 à 00:24
Oui effectivement ça marche maintenant.
Merci pkpkmépkpk
Commenter la réponse de pkpkmépkpk