3

私は現在、「構造化プログラミング手法」のコースを受講しています。このコースは言語ベースではありませんが、通常は C または C++ を使用します。これらの言語のいずれかで書く必要がある場合もあれば、最初に C で書いてコードを C++ に変換する必要がある場合もあり、好きな言語で書くことが許される場合もあります。かなり奇妙かもしれませんが、私は C の (f/p)rintf を利用することを好みます。だから、ここに私の問題があります:

これは私のヘッダーファイルです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;

「メイン」.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;
    }

他の質問/回答で提案された多くの組み合わせを試しましたが、言語間の状況に対処しているようには見えません。

私は基本的に、コードの大部分をC++のままにして、fprintfを引き続き使用できるソリューションを探しています。

私は解決策をコーディングしてくれる人を探しているのではなく、これに関する問題と論理的にそれらを回避する方法を説明してくれる人を探しているのではありません。

また、typedef は必須です。ありがとう-

4

1 に答える 1

3

std::stringでフォーマットするためc_str() constに「準備」するために使用できるメソッドがあります:std::string%s

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

printf スタイルの関数が%sフォーマット文字列を参照する場合、NUL で終了する C 文字列 (型: ) を探していますconst char *。このstd::string::c_str() constメソッドは、std::stringオブジェクトに対してそれを返します。

于 2012-07-15T10:55:06.477 に答える