将CRC数据写入.txt文件 这似乎应该是一个基本的C++过程,但是我对数据输出不太熟悉。

将CRC数据写入.txt文件 这似乎应该是一个基本的C++过程,但是我对数据输出不太熟悉。,c++,fstream,C++,Fstream,当我打印数据而不输出到文本文件时,我得到了正确的值 example: 00150017000 181 打印到文本文件时,我得到的结果如下: 11161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111

当我打印数据而不输出到文本文件时,我得到了正确的值

example: 00150017000 181
打印到文本文件时,我得到的结果如下:

11161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116111611161116
这是我的密码:

ofstream myfile;
myfile.open("C:\\CRC.txt");
for (i = 0; i < 200; i++, id++)
{
    myfile << sprintf(idstring, "%011d", id);
    myfile << printf("%s %03d\n", idstring, computeCrc(idstring));
}
myfile.close();
流myfile的
;
myfile.open(“C:\\CRC.txt”);
对于(i=0;i<200;i++,id++)
{

myfile您不会将您认为保存的内容保存到文件中。首先保存
sprintf()
函数的结果,在本例中为11。然后保存
printf()
函数的结果,在本例中为11+1(空格)+3+1(\n)=16。因此结果是1116的200倍

你想做什么

char tempBuf[12];
ofstream myfile;
myfile.open("C:\\CRC.txt");
for (i = 0; i < 200; i++, id++)
{
    sprintf(tempBuf, "%011d", id);
    myfile << tempBuf << ' ';        
    sprintf(tempBuf, "%03d", computeCrc(tempBuf));
    myFile << tempBuf << '\n';
}
myfile.close();
char tempBuf[12];
流文件;
myfile.open(“C:\\CRC.txt”);
对于(i=0;i<200;i++,id++)
{
sprintf(tempBuf,“%011d”,id);

myfile您不会将您认为保存的内容保存到文件中。首先保存
sprintf()
函数的结果,在本例中为11。然后保存
printf()
函数的结果,在本例中为11+1(空格)+3+1(\n)=16。因此结果是1116的200倍

你想做什么

char tempBuf[12];
ofstream myfile;
myfile.open("C:\\CRC.txt");
for (i = 0; i < 200; i++, id++)
{
    sprintf(tempBuf, "%011d", id);
    myfile << tempBuf << ' ';        
    sprintf(tempBuf, "%03d", computeCrc(tempBuf));
    myFile << tempBuf << '\n';
}
myfile.close();
char tempBuf[12];
流文件;
myfile.open(“C:\\CRC.txt”);
对于(i=0;i<200;i++,id++)
{
sprintf(tempBuf,“%011d”,id);

myfile您正在将
sprintf()
printf()
的返回值输出到文件中。
sprintf()
printf()
的返回值是
int
而不是您正在创建的字符串。要输出字符串,您需要将代码更改为

for (i = 0; i < 200; i++, id++)
{
    sprintf(idstring, "%011d", id);
    myfile << idstring;
    myfile << computeCrc(idstring) << endl;
}
for(i=0;i<200;i++,id++)
{
sprintf(idstring,“%011d”,id);

myfile您正在将
sprintf()
printf()
的返回值输出到文件中。
sprintf()
printf()
的返回值是
int
而不是您正在创建的字符串。要输出字符串,您需要将代码更改为

for (i = 0; i < 200; i++, id++)
{
    sprintf(idstring, "%011d", id);
    myfile << idstring;
    myfile << computeCrc(idstring) << endl;
}
for(i=0;i<200;i++,id++)
{
sprintf(idstring,“%011d”,id);

myfile@rozina哎哟,看起来是这样的:int_cdeclI会删除for循环并开始在固定的数字上进行调试。还有一个问题,为什么要将sprintf的结果保存到该文件中?老实说,不确定。使用我没有编写的源代码并尝试输出它是我所做的全部@rozina@rozina我很抱歉我没有时间detail@rozina哎呀,看起来我就像这样:int_cdeclI将删除for循环并开始在固定的数字上进行调试。还有一个问题,为什么要将sprintf的结果保存到文件中?老实说,我不确定。我所做的就是使用我没有编写的源代码并尝试输出它@rozina@rozina很抱歉,缺少详细信息“%s%03d\n”这有什么意义吗?我尝试了这段代码,虽然“idstring”输出正确,但computeCrc(idstring)现在输出为单个随机符号和字符。conputerCrc(idstring)实际上是一个无符号字符。我应该使用atoi或类似的方法将其转换为int吗?因此我尝试强制转换computeCrc(idstring)转换为整数,但它没有返回正确的3位数值。@terbubbs是的ofc,您是正确的,
computeCrc()
的结果需要转换为字符串。您可以使用
sprintf()
。我将更新答案。“%s%03d\n”这有什么意义吗?我尝试了这段代码,虽然“idstring”输出正确,但computeCrc(idstring)现在输出为单个随机符号和字符。conputerCrc(idstring)实际上是一个无符号字符。我应该使用atoi或类似的方法将其转换为int吗?因此我尝试强制转换computeCrc(idstring)转换为整数,但它没有返回正确的3位数值。@terbubbs是的ofc,您是正确的,
computeCrc()
的结果需要转换为字符串。您可以使用
sprintf()
进行转换。我将更新答案。