Я не могу понять, почему он не отображает число с плавающей точкой в ​​файле (бинарный файл) - PullRequest
1 голос
/ 06 марта 2019
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

struct etudiant{
  char nom[10];
  float moy;
};

void AjoutEtudiant(struct etudiant E,FILE *ficheierEtudiant) {
  ficheierEtudiant = fopen("C:/Users/Ayoub/Desktop/TDTP/Ex1/Etudiant.dat","w");
  char rep;

  do{
    printf("Saisir nom etudiant a Ajouter: ");
    scanf("%s",&E.nom);
    printf("Saisir son Moyen: ");
    scanf("%f",&E.moy);
    fwrite (&E, sizeof(struct etudiant), 1,ficheierEtudiant);
    if(fwrite!=0){
        printf("\n\nEtudaint Ajouter avec succees !\n\n");
    }
    printf("\nvoulez vouz Ajouter un autre etudiant? (O,N): ");
    scanf("%s",&rep);
  } while(toupper(rep)!='N');

  fclose(ficheierEtudiant);
}

void EcrireListeEtudiant(struct etudiant E, FILE* fichierEtudiant) {
 fichierEtudiant=fopen("C:/Users/Ayoub/Desktop/TDTP/Ex1/Etudiant.dat","rb");
  while(fread(&E,sizeof(struct etudiant),1,fichierEtudiant))
    printf("Nom Etudiant: %s",E.nom,"| Moyen= %f \n",E.moy);

  fclose(fichierEtudiant);
}

int main()
{
   FILE *fichierEtudiant;
   struct etudiant E;

   AjoutEtudiant(E,fichierEtudiant);
   EcrireListeEtudiant(E,fichierEtudiant);
}

Я добавляю имена и их метки (float) в файл, но когда я пытаюсь отобразить их, он показывает только имя и игнорирует части с плавающей точкой в ​​файле! Я пробовал много способов, но в итоге все испортил. Может кто-нибудь помочь мне разобраться в проблеме?

1 Ответ

0 голосов
/ 06 марта 2019

Чтобы получить имя и моен, измените

printf("Nom Etudiant: %s",E.nom,"| Moyen= %f \n",E.moy);

до

printf("Nom Etudiant: %s| Moyen= %f \n", E.nom, E.moy);

Это необходимо, потому что printf всегда принимает одну строку формата, а затем все аргументы. Если первая строка описывает только один аргумент, остальные будут игнорироваться.
В вашем коде второй аргумент - это вторая половина строки формата, а третий аргумент - это тот код, который вы пропустили в выводе. Оба игнорируются.

В предложенной единственной, более длинной строке формата описываются два аргумента, так что оба находятся и используются, и оба попадают в выходные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...