我目前正在学习“结构化编程方法”课程。该课程不是基于语言的,但我们通常使用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;
}
我尝试了其他问题/答案提出的大量组合,但似乎都没有处理跨语言情况。
我基本上正在寻找一种解决方案,允许我继续使用fprintf,同时保留大部分代码C ++。
我不是在寻找有人为我编写解决方案的代码,而是要解释这个问题是什么以及如何在逻辑上绕过它们。
此外,typedef是一项要求。 谢谢 -
答案 0 :(得分:3)
std::string
有一个c_str() const
方法,您可以使用std::string
“准备”%s
进行格式设置{/ 1}}:
fprintf(fp, "%s", e->fullname.c_str());
当printf样式的函数在格式字符串中看到%s
时,它正在查找NUL终止的C字符串(类型:const char *
)。 std::string::c_str() const
方法仅返回std::string
对象的内容。