如何使用 fprintf 打印头文件中定义的结构成员值?

How do I use fprintf to print a struct member values that's defined in a header file?

本文关键字:结构 成员 定义 何使用 fprintf 打印头 文件      更新时间:2023-10-16

我目前正在学习一门关于"结构化编程方法"的课程。这门课程不是基于语言的,但我们通常使用C或C++。有时我需要用其中一种语言编写,有时我必须首先用C编写并将代码转换为C++,有时我可以用我喜欢的语言编写。可能很奇怪,我更喜欢使用C的(f/p)printf。所以,我的问题是:

这是我的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;
    }

我试过很多其他问题/答案建议的组合,但似乎没有一个能处理跨语言的情况。

我基本上是在寻找一个解决方案,允许我继续使用fprintf,同时留下大部分代码C++。

我不是在找人为我编写解决方案的代码,而是在解释这个问题是什么,以及如何从逻辑上绕过它们。

此外,typedef也是一项要求。谢谢-

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对象的值。