Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3007 connectés 

  FORUM HardWare.fr
  Programmation
  C

  probleme de modification de fichier texte urgent

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

probleme de modification de fichier texte urgent

n°765484
lefauve
Posté le 16-06-2004 à 11:29:35  profilanswer
 


 
donc dans les procedure de modification modifequipe  
 
lorsque je demande quelles informations voulez vous modifier, je saisis un chiffre  en fonction de l'info, puis je saisi l'information a laquelle il se rapporte .
 
Mais pour certaines informations g besoin d'utiliser les espaces, j'ai donc utilisé gets(enregistrement.champ) malheureusement je sais pas pourquoi mais il le reconnait pas ,g essayer scanf pr voir si je ne m'etait pas tromper autre part dans la selection et cela fonctionne mais je ne peut alors pas utiliser les espaces.donc ou j'utilise mal la synthaxe du gets ou le pb vient d'autre part.Je vous en serais reconnaissant si vous pouviez y jeter un coup d'oeil pour me renseigner merci d'avance  

Code :
  1. void modifequipe()
  2. {
  3.     int cpt;
  4. char name[40+1];
  5. char rep;
  6.     int choix;
  7.     system("cls" );
  8. printf("\n****************************************************************************\n\n\n" );
  9. printf("\t\t\t\tMODIFICATION DES EQUIPES\n" );
  10. printf("\n****************************************************************************\n\n\n" );
  11. printf ("\n\nsaisir le nom de l'equipe a modifier : " );
  12.     flushall();
  13. scanf("%s",&name);//saisie d'une chaine (s pour string)
  14.     if(existeequipe(name)==true)//verif de l'existence
  15.     {
  16.         cpt=compteequipe(name);//place de l'enregistrement
  17.         fichier_equipe=fopen("fequipe.txt","r+" );//ouverture en lecture-écriture
  18.         fseek(fichier_equipe,sizeof(enrequipe)*(cpt),SEEK_SET);//on positionne la lecture au niveau de la place de l'enr
  19.         fread(&enrequipe,sizeof(enrequipe),1,fichier_equipe);//la on lit l'enr trouver
  20.         printf("etes vous sur de vouloir modifier le client %s %s? o/n ",enrequipe.nom,enrequipe.prenom);
  21.         flushall();
  22.         rep=(char) getchar();
  23.  flushall();
  24.         if (rep=='o'|| rep=='O')
  25.         {
  26.             printf ("que voulez vous modifiez :\n\n" );
  27.             printf("\n1 Modifier le nom" );
  28.             printf("\n2 Modifier le prenom" );
  29.             printf("\n3 Modifier la date de naissance " );
  30.             printf("\n4 Modifier l'adresse" );
  31.             printf("\n5 Modifier le code postal" );
  32.             printf("\n6 Modifier la ville" );
  33.             printf("\n7 Modifier le numero de telephone 1" );
  34.             printf("\n8 Modifier le numero de telephone 2" );
  35.             printf("\n9 Modifier le numero de portable" );
  36.             printf("\n10 Modifier le numero de fax" );
  37.             printf("\n11 Modifier l'e-mail 1" );
  38.             printf("\n12 Modifier l'e-mail 2" );
  39.             printf("\n13 Modifier le role" );
  40.             printf("\n14 Modifier le statut" );
  41.             printf("\n15 Modifier les remarques " );
  42.             printf("\n Saisissez votre choix : " );
  43.             flushall();
  44.             scanf("%d",&choix);
  45.             switch(choix)
  46.             {
  47.                 case 1 : gets(enrequipe.nom);//pas de cote pr le choix car c du decimal et non du char
  48.                     break;
  49.                 case 2 : gets(enrequipe.prenom);
  50.                     break;
  51.                 case 3 : gets(enrequipe.naissance);
  52.                     break;
  53.                 case 4 : gets(enrequipe.adresse);
  54.                     break;
  55.                 case 5 : gets(enrequipe.cp);
  56.                     break;
  57.                 case 6 : gets(enrequipe.ville);
  58.                     break;
  59.                 case 7 : gets(enrequipe.tel1);
  60.                     break;
  61.                 case 8 : gets(enrequipe.tel2);
  62.                     break;
  63.                 case 9 : gets(enrequipe.portable);
  64.                     break;
  65.                 case 10 : gets(enrequipe.fax);
  66.                     break;
  67.                 case 11 : gets(enrequipe.email1);
  68.                     break;
  69.                 case 12 : gets(enrequipe.email2);
  70.                     break;
  71.                 case 13 : gets(enrequipe.role);
  72.                     break;
  73.                 case 14 : gets(enrequipe.statut);
  74.                     break;
  75.                 case 15 : gets(enrequipe.remarque);
  76.                     break;
  77.             }
  78.             fseek(fichier_equipe,sizeof(enrequipe)*(cpt),SEEK_SET);
  79.             //on se replace a l'endroit du fichier où se trouve le client
  80.             fwrite(&enrequipe,sizeof(enrequipe),1,fichier_equipe);
  81.             printf("fiche modifiee" );
  82.             fclose(fichier_equipe);
  83.         }
  84.     }
  85. }

mood
Publicité
Posté le 16-06-2004 à 11:29:35  profilanswer
 

n°765487
Taz
bisounours-codeur
Posté le 16-06-2004 à 11:31:43  profilanswer
 

scanf("%s",&name);//saisie d'une chaine (s pour string)
 
 
première ligne première erreur. et je ne te parle pas de remplacer scanf par fgets
 
 
 
    printf ("que voulez vous modifiez :\n\n" );
                    printf("\n1 Modifier le nom" );
                    printf("\n2 Modifier le prenom" );
                    printf("\n3 Modifier la date de naissance " );
                    printf("\n4 Modifier l'adresse" );
                    printf("\n5 Modifier le code postal" );
                    printf("\n6 Modifier la ville" );
                    printf("\n7 Modifier le numero de telephone 1" );
                    printf("\n8 Modifier le numero de telephone 2" );
                    printf("\n9 Modifier le numero de portable" );
                    printf("\n10 Modifier le numero de fax" );
                    printf("\n11 Modifier l'e-mail 1" );
                    printf("\n12 Modifier l'e-mail 2" );
                    printf("\n13 Modifier le role" );
                    printf("\n14 Modifier le statut" );
                    printf("\n15 Modifier les remarques " );  
 
 
 
un seul printf suffit
 
 
printf("ligne1\n"
    "ligne2\n"
 
etc
 
le cpp colle toutes les lignes

n°765490
Taz
bisounours-codeur
Posté le 16-06-2004 à 11:32:37  profilanswer
 

fflushall() n'est pas standard. préfère fflush(stdout);
 
et y a pas de booléen en C

n°765504
lefauve
Posté le 16-06-2004 à 11:36:45  profilanswer
 

elle est ou la faute a la premiere ligne?g mis %s c bon non?
si le truc booleen marche
puis pour la lisibilite g prefere ma solution pr le printf que celle sur une seul ligne.
bon en plus en c je debute donc bon on passe ca,moi mon pb c le gets ki me fait retourner a mon menu alors ki devrait saisir
 

n°765525
Taz
bisounours-codeur
Posté le 16-06-2004 à 11:46:47  profilanswer
 

- si c'est pas le %s qui déconne, c'est que ça doit être à côté non ?
 
- bravo, tu utilises VC++
 
- la solution que je te propose est plus lisible, car tu économises des tas de "printf(  );"

n°765534
lefauve
Posté le 16-06-2004 à 11:50:52  profilanswer
 

non car sa marche avec scanf
on ma parle de stdin
je v tester
et moi j'utilise sutout borland mais bon si je doit utiliser vsc++
c po grave

n°765545
cricri_
Posté le 16-06-2004 à 11:54:38  profilanswer
 

Le scanf peut pas fonctionner là ...

n°765560
lefauve
Posté le 16-06-2004 à 12:00:34  profilanswer
 

mais vla le boulet ca marche mais pas avec les espace c tout

n°765582
lefauve
Posté le 16-06-2004 à 12:09:46  profilanswer
 

bon ecoutez arreter ede me parler de mon printf ou mon scanf, je veut juste prendre en compte les espaces merci de vous focaliser sur ca et non les pb booleen, ca fait deja une semaine ke je bosse sur cette erreur je suis a bout la!!!!!

n°765589
cricri_
Posté le 16-06-2004 à 12:16:00  profilanswer
 

MDR ...  :lol:

mood
Publicité
Posté le 16-06-2004 à 12:16:00  profilanswer
 

n°765591
Taz
bisounours-codeur
Posté le 16-06-2004 à 12:16:26  profilanswer
 

ben tu vas continuer tout seul alors ... puisque tu ne veux pas écouter nos conseils

n°765593
Taz
bisounours-codeur
Posté le 16-06-2004 à 12:17:09  profilanswer
 

lefauve a écrit :

mais vla le boulet ca marche mais pas avec les espace c tout

c'est vrai que t'as vachement d'expérience. je crois qu'en 30minutes, tout le monde peut en avoir autant

n°765610
lefauve
Posté le 16-06-2004 à 12:28:22  profilanswer
 

non mais je critique pas vos connaisance mais bon je vs pose une question présice et vs me parlez de la mise en page ou des reponses a coté donc bon c normal ke sa me saoul c t pas pr vs vexer les gars

n°765625
Taz
bisounours-codeur
Posté le 16-06-2004 à 12:40:33  profilanswer
 

on te dis que 1) ton scanf marche pas et plante 2) d'utiliser fgets 3) que les booléens existe pas en C

n°765636
lefauve
Posté le 16-06-2004 à 12:47:22  profilanswer
 

le  scanf("%s",&name)?pk il marche pas, c chelou , moi il marche sur mon pc oui mais j'utilise c++ builder donc il reconnait le booléen puis je l'ait essayer , il marche, je sai je suis relou mais bon, a la limite explique moi pk ca marche pas ca m'interesse je sui ouvert a tt propos de toute facon

n°765639
Taz
bisounours-codeur
Posté le 16-06-2004 à 12:51:34  profilanswer
 

1) tu ferais bien de réviser tes pointeurs
2) "ça compile" ne veut pas dire "ça marche". Revois ton C

n°765644
lefauve
Posté le 16-06-2004 à 12:56:20  profilanswer
 

il est ou le probleme avec le pointeur?le programme se compile et fonctionne si je remplace le gets par scanf donc j'en ai deduit ke c t pas le scanf donc au lieu de me faire des critique gratuite explique moi ca sera plus rapide merci taz

n°765645
lefauve
Posté le 16-06-2004 à 12:58:49  profilanswer
 

a la limite corrige le pg et balance ta soluce ca  m'avancera

n°765667
lefauve
Posté le 16-06-2004 à 13:26:54  profilanswer
 

allez siouplait help me j'en ai marre

n°765704
Taz
bisounours-codeur
Posté le 16-06-2004 à 13:54:49  profilanswer
 

utilise comme ça
 
char ligne[128];
 
fgets(ligne, sizeof ligne, stdin)

n°765881
lefauve
Posté le 16-06-2004 à 15:12:55  profilanswer
 

et apres , je fait koi?je l'attribu a l'enregistrement en fonction du choix?

n°765898
Taz
bisounours-codeur
Posté le 16-06-2004 à 15:21:43  profilanswer
 

?

n°765916
lefauve
Posté le 16-06-2004 à 15:30:14  profilanswer
 

bah la ligne ke tu me fait declarer je la positionne ou?

n°765927
Taz
bisounours-codeur
Posté le 16-06-2004 à 15:36:59  profilanswer
 

DTC
 
ben pour lire une ligne bordel :o

n°765935
lefauve
Posté le 16-06-2004 à 15:40:42  profilanswer
 

faut ke je redeclare tout les enregistrement?ou je peut mettre ce qui sont dans ma structure?

n°765939
Taz
bisounours-codeur
Posté le 16-06-2004 à 15:42:31  profilanswer
 

mais tu racontes quoi bordel ?

n°765968
lefauve
Posté le 16-06-2004 à 15:58:45  profilanswer
 

bah je veut gerer des equipe, pouvoir en ajouter, en supprimer, en rechercher et  en modifier et tout garder sur un fichier txt.donc g fait ca:
FILE *fichier_equipe;
struct equipe
{
    char nom[50+1];
    char prenom[50+1];
    char naissance[15+1];
    char adresse [40 +1];
    char cp[12+1];
    char ville [50+1];
    char tel1[12+1];
    char tel2[12+1];
    char portable[12+1];
    char fax[12+1];
    char email1[55+1];
    char email2[55+1];
    char role [40+1];
    char statut[40+1];
    char remarque[100+1];
 
}enrequipe;
 
ensuite j'ajoute l'equipe comme ca:
void ajoutequipe ()
{
    char rep;
 rep='o';
 
do
{
    printf ("enregistrer une  équipe?" );
        flushall();
        rep = (char) getchar();
 
 
 
    if ((rep == 'o') || (rep == 'O'))
    {
        fichier_equipe = fopen("fequipe.txt","a+" );
        printf("saisir le nom de l'equipe:\n" );
        flushall();
        gets(enrequipe.nom );//nom de l'enregistrement.le champ
        printf ("saisir prenom: " );
        flushall();
        gets(enrequipe.prenom);
        printf ("saisir la date de naissance: " );
        flushall();
        gets(enrequipe.naissance);
        printf ("saisir l'adresse: " );
        flushall();//afin de liberer la memoire tampon
        gets(enrequipe.adresse);  
        printf("saisir le code postal :\n" );
        flushall();
        gets(enrequipe.cp);
        printf ("saisir la ville :\n" );
        flushall();
        gets(enrequipe.ville);
        printf ("saisir le telephone 1: " );
        flushall();
        gets(enrequipe.tel1);
        printf ("saisir le telephone 2: " );
        flushall();
        gets(enrequipe.tel2);
        printf ("saisir le numero de portable :\n" );
        flushall();
        gets(enrequipe.portable);
        printf("saisir le numero de fax  :\n" );
        flushall();
        gets(enrequipe.fax);
        printf("saisir l'e-mail 1 :\n" );
        flushall();
        gets(enrequipe.email1);
        printf("saisir  l'e-mail 2 :\n" );
        flushall();
        gets(enrequipe.email2);
        printf("saisir le statut : \n" );
        flushall();
        gets(enrequipe.statut);
        printf("saisir son role :\n" );
        flushall();
        gets(enrequipe.role);
        printf("saisir  des remarques :" );
        flushall();
        gets(enrequipe.remarque);
        fwrite (&enrequipe,sizeof(enrequipe),1,fichier_equipe);
        fclose (fichier_equipe);
 
    }
    else
  {
    system("cls" );//appelle la fonction du systeme ki
    menuequipe();//on retourne au menu des clients
  }
 }while((rep=='o')|| (rep == 'O'));//condition du fr tque
}
puis apres je veut modifier une ligne dans l'equipe, bah j'utilise ma fonction modifier du premier truc mais bon tjs le meme problem, kan je saisi le choix qui se rapport a l'information que je veut modifier par exemple l'adresse (enrequipe.adresse) si je saisi avec scanf,ca prend pas en compte les espaces, le gets il le reconnait plus, et je sait pas  comment utiliser fgets dans ce cas si.je te parle de la synthaxe exact bien sur.  

n°765975
HelloWorld
Salut tout le monde!
Posté le 16-06-2004 à 16:00:19  profilanswer
 

balises [cpp] stp


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°765984
Taz
bisounours-codeur
Posté le 16-06-2004 à 16:04:03  profilanswer
 

1) n'utilise pas flushall mais fflush(stdout)
2) utilise fgets à la place de gets. je t'ai donné un exemple. fgets(structurre.membre, sizeof structurre.membre, stdin)

n°765989
lefauve
Posté le 16-06-2004 à 16:04:48  profilanswer
 

alors g modifier comme ca, ca marche mieux car ta soluce seul ne m'aider pas elle faisait la meme que le gets
donc j'ai mis au-dessus et en-dessous fflush(stdin)
donc ca avnce puisque ca enregistre mais moi je voulait qu'il le mette a la place,maintenant j'ai le fichier en double il est ou le pb?

n°765992
lefauve
Posté le 16-06-2004 à 16:05:22  profilanswer
 

dsl ok

n°766001
lefauve
Posté le 16-06-2004 à 16:08:35  profilanswer
 

si en fait elle fait com le get sla tienne

n°766006
Taz
bisounours-codeur
Posté le 16-06-2004 à 16:09:16  profilanswer
 

c'est à dire ? tu veux les espace ou pas ?

n°766008
lefauve
Posté le 16-06-2004 à 16:09:44  profilanswer
 

voui voui

n°766013
Taz
bisounours-codeur
Posté le 16-06-2004 à 16:11:29  profilanswer
 

bon ben alors ça marche.
 
J'AI PAS DIT fflush(stdin)
 
MAIS fflush(stdout) :o
 
 
fflush(stdin) ne fait rien et rien du touts

n°766030
lefauve
Posté le 16-06-2004 à 16:18:49  profilanswer
 

bah sur mon pg c le contraire mais maintenant je me retrouve avec enregistrement l'original et le modifier

n°766072
Taz
bisounours-codeur
Posté le 16-06-2004 à 16:34:53  profilanswer
 

bon quand tu sauras t'exprimer, t'auras qu'à remonter ce sujet
 
et me dit pas "ouin c'est le contraire" je suis pas là pour te raconter des conneries. si ça foire, c'est pas là, c'est en amont dans ton programme
 
des printf + fflush(stdout) + fgets c'est une solution éprouvée depuis 20ans, tu vas pas nous dire que ça marche pas après une après midi de C

n°766111
lefauve
Posté le 16-06-2004 à 16:49:48  profilanswer
 

BOn ecoute je ne fait que te dire ce qui se passe sur mon pc, j'en sait rien si c normal ou pas normal, que stdin marche mais ce que je sai c ke ta solution na pas d'effet dans mon programme donc pas la peine de t'enerver ou alors tu je l'ai juste mal place dans cette partis de mon code.en plus je sai pas pk tu me parle de printf la.
donc je l'ai place ici:
case 3:fflush(stdout);
       fgets(enrequipe.adresse,150,stdin);
break;
 
CA sa marche pas ensuite
case 3:fflush(stdout);
       fgets(enrequipe.adresse,150,stdin);
       fflush(stdout);  
break;
ca non plus
case 3:
       fgets(enrequipe.adresse,150,stdin);
       fflush(stdout);
break;
ca non plus.le seul truc ki fait qqch,c'est
case 3:
       fflush(stdin);
       fgets(enrequipe.adresse,150,stdin);
       fflush(stdin);
break;
c tout!!!j'y peut rien je v pas te dire ca marche alors que non.donc est-ce que je l'ai bien place ton fflush()
?

n°766124
chaica
Posté le 16-06-2004 à 16:53:01  profilanswer
 

Retire vite tes fflush(stdin) avant de te faire insulter.
 
Extrait de http://www.isty-info.uvsq.fr/~rume [...] 4.html#q_4 mais surtout présent dans le Kernighan & Ritchie :
 
14.4 Pourquoi ne jamais faire fflush(stdin) ?
La fonction fflush() a un comportement défini uniquement sur les flux ouverts en écriture tels que stdout. Il est possible que sur votre système, appliquer cette fonction à stdin soit possible, mais c'est alors une extension non standard. Le comportement est indéterminé, et imprévisible.

n°766129
Taz
bisounours-codeur
Posté le 16-06-2004 à 16:54:13  profilanswer
 

ase 3:fflush(stdout);
       fgets(enrequipe.adresse,150,stdin);
break;  
 
 
ça marchera toujours sauf si avant t'as foutu le bronx avec tes flush à la con dans tous les sens, résultat, ton stdin est une vrai poubelle, y a de tout dedans.
 
alors tu vérifies toutes tes lectures en amont, tu fais bien des printf + fflush(stdout) + scanf/fgets, tu vérifies que scanf et fgets on bien réussi et ça marchera.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  probleme de modification de fichier texte urgent

 

Sujets relatifs
problème d'installation: IIS ne reconnait pas mes pages aspx[yacc] comment passer en parametre un fichier à traiter à yyparse ?
[PHP] Problème de redirection[C++] Créer un fichier word a 2 cellules avec une image tif
probleme de calques[PHP] Conversion fichier .tif en .png 24 bits
Problème de recuperation de variableProblème de configuration pour QT
probleme sur calcul de tempsProblème Connexion BDD (ASP) [Résolu]
Plus de sujets relatifs à : probleme de modification de fichier texte urgent


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR