Forum Clubic

Modification d'un fichier - En C

Salut je voudrais pourvoir modifier des données dans mon TP en C mais ça marche pas.

void modifeleve()
{	
	int nb,num,taille,pos,rep;
	seleve eleve;
	FILE *f;

	system("cls");

	printf("MODIFICATION D'UN ELEVE\n\n");

	printf("Voici les eleves enregistres dans le fichier %s\n\n",fic);
	nb=afficheeleve();

	f=fopen(fic,"r");
	fseek(f, 0,SEEK_END);//SEEK_END fait positionnner le pointeur à la fin donc on met 0
	taille=ftell(f);
	
	
	

	printf("Entrez le numero de l'eleve a modifier: ");
	scanf("%d",&num);
	pos=( sizeof(eleve)*(num-1) );//on met num-1 car ça commence à 0
	while(num<1 || pos>=taille)
  {
  	printf("\nNumero inexistant, recommencez svp :");
  	flushall();  	
  	scanf("%d",&num);
  	pos=( sizeof(eleve)*(num-1) );//on met num-1 car ça commence à 0
  }
	

	fseek(f,pos,SEEK_SET);
	fread(&eleve,sizeof(eleve),1,f);
	printf("\n\n\nVous avez choisi de modifier %s %s",eleve.nom,eleve.prenom);
	
  
	printf("\n\n1) Modifier son nom");
	printf("\n2) Modifier son prenom");
	printf("\n3) Modifier son classe");
	printf("\n4) Modifier ses retards");
	printf("\n5) Modifier ses abscences");
	printf("\n6) Modifier ses retenues");
	printf("\n\nVotre choix :");
	scanf("%d",&rep);

  if(rep==1)
  {
  	printf("Entrez le nouveau nom :");
  	flushall();
  	gets(eleve.nom);
  	printf("\nLe nouvo nom est %s",eleve.nom);
  	
  }
	
	fseek(f,pos,SEEK_SET);
	fwrite(&eleve,sizeof(eleve),1,f);

	fclose(f);


	printf("Pressez une touche pour continuez ...");

	//printf("\nIl y a %d eleves",nb);
	getch();
	menuauth();

}

Qqn peut me dire ou ça va pas ?

  1. system(…) ne jamais faire d’appel système, surtout quand ça dépend de la plate forme (ici windows). Mais surtout ne jamais effacer l’écran de l’utilisateur (ça peut être toi, ou un prof) dans le programme. Là, il perd tout ce qu’il avait avant…

  2. fopen(…) tu essaye d’écrire sur un fichier en lecture seule. Moralité? Il n’arrivera pas à écrire.

-> if ( fwrite(&eleve,sizeof(eleve),1,f) != 1 ) perror("erreur");

Essaye le mode rw.

mais oui quel cretin !!!!!!!!!!!!! Merci beaucoup! Jai mis r+

Et j’utilise system(“cls”) pour pas qu’il y ait trop de lignes les unes a la suite des autres.

merci encore