2012-07-15 1 views
3

Je suis en train de suivre un cours sur les "méthodes de programmation structurées". Le cours n'est pas basé sur le langage, mais nous utilisons généralement C ou C++. Parfois, je suis obligé d'écrire dans l'une de ces langues, parfois je dois d'abord écrire en C et convertir le code en C++, et parfois je suis autorisé à écrire dans ce que je préfère. Très probablement bizarre, je préfère utiliser C (f/p) rintf. Alors, voici ma question:Comment utiliser fprintf pour imprimer les valeurs d'un membre struct définies dans un fichier d'en-tête?

Ceci est mon fichier d'en-tête pour le struct:

#include <string> 
using namespace std; 

typedef string FNAME; 
typedef string LNAME; 
typedef string FULLNAME; 
typedef struct EmpRecord 
{ 
    FNAME firstname; 
    LNAME lastname; 
    FULLNAME fullname; 
    float hours, rate, deferred, gross, netpay, 
      fedtax, statetax, ssitax; 
    } EmpRecord; 

est ici le « principal » Cpp:

 #define STRADD ", " 
     #include <stdio.h> 
     #include <iostream> 
     #include <fstream> 
     #include <iomanip> 
     #include <string> 
     #include "Struct.h" 
     #include "Rates.h" 
     #include "calcTaxesPlus.cpp" 
     using namespace std; 

     /*......*/ 
     void printEmpData(FILE *fp, struct EmpRecord *, float reghrs, float othrs);//3.8 
     /*......*/ 
     int main() 
     { 
      float totRegHrs, totOtHrs, totRates, totGross, totDeferd, 
        totFed, totState, totSSI, totNet; 
      float reghrs, othrs; 
      float avgRate, avgRegHrs, avgGross, avgFed, avgSSI, avgNet, 
        avgOtHrs, avgState, avgDeferd; 
      int numEmp; 

      EmpRecord emp; 
      EmpRecord *Eptr; 
      Eptr = &emp; 

      FILE * fp; 
      fp = fopen("3AReport.txt", "w"); 
      if (fopen == NULL) 
      { 
       printf("Couldn't open output file...!"); 
       fflush(stdin); 
       getchar(); 
       exit(-1000); 
      } 
      /*....*/ 
      printEmpData(fp, Eptr, reghrs, othrs);//3.8 
      return 0; 
     } 
     /*....*/ 
     void printEmpData(FILE *fp, struct EmpRecord *e, float reghrs, float othrs) 
     { 
      fprintf(fp, "\n%-17.16s %5.2f  %5.2f  %7.2f  %6.2f  %6.2f %7.2f", e->fullname, e->rate, reghrs, e->gross, e->fedtax, e->ssitax, e->netpay); 
      fprintf(fp, "\n        %5.2f     %6.2f  %6.2f  \n", othrs, e->statetax, e->deferred); 
     return; 
    } 

J'ai essayé une tonne de combinaisons suggérées par d'autres questions/réponses, mais aucune ne semble traiter d'une situation multilingue.

Je cherche essentiellement une solution qui me permette de continuer à utiliser fprintf tout en laissant la majeure partie du code C++.

Je ne cherche pas quelqu'un pour coder la solution pour moi, mais plutôt pour expliquer quels sont les problèmes avec cela et comment les contourner logiquement.

De plus, typedef est une exigence. Action de grâce

+2

Ne pas 'fflush (stdin)', c'est un comportement indéfini. – ouah

Répondre

3

std::string a une méthode c_str() const que vous pouvez utiliser pour "préparation" un std::string pour le formatage avec %s:

fprintf(fp, "%s", e->fullname.c_str()); 

Lorsqu'une fonction printf voit %s dans la chaîne de format, il est à la recherche pour une chaîne C à terminaison NUL (type: const char *). La méthode std::string::c_str() const renvoie juste cela pour l'objet std::string.

+0

Wow, c'était génial, merci! Je réalise maintenant que c'était mon seul problème. Le fichier de rapport contenait d'énormes chiffres qui ne permettaient pas de les comprendre, alors je pensais que chaque membre était mal imprimé, mais avec votre simple suggestion tout est beau !! – ChiefTwoPencils

Questions connexes