C printf,将头添加到输出文件

C printf,将头添加到输出文件,c,printf,C,Printf,我有 printf("%12.8f, %12.8f, %6.3f, %04u/%02u/%02u %i:%i:4.2f\n",sbet.longitude1,sbet.latitude1,sbet.altitude ,myyear,mymonth, myday, sbet.hour, sbet.minute, sbet.second); 在If语句中。它一行一行地产生我想要的东西。但是现在我想在最上面添加一个标题/标题。我是否使用另一个printf语句?当我尝试一个简单的 printf("

我有

printf("%12.8f, %12.8f, %6.3f, %04u/%02u/%02u   %i:%i:4.2f\n",sbet.longitude1,sbet.latitude1,sbet.altitude ,myyear,mymonth, myday, sbet.hour, sbet.minute, sbet.second);
在If语句中。它一行一行地产生我想要的东西。但是现在我想在最上面添加一个标题/标题。我是否使用另一个printf语句?当我尝试一个简单的

printf("Longitude,", "Latitude," "Elevation," , "UTC Time");
这并没有给出我想要的,它只是在每一行上加上“经度”,以及其他printf语句中的其他参数

基本上,我想要这个结果

Longitude,   Latitude,   Elevation,   UTC Time
-50.62596165,  67.01225899, 82.948, 2012/05/08   10:0:0.04
-50.62596152,  67.01225906, 82.949, 2012/05/08   10:0:1.04
-50.62596154,  67.01225906, 82.950, 2012/05/08   10:0:2.04
-50.62596148,  67.01225902, 82.951, 2012/05/08   10:0:3.04
-50.62596154,  67.01225907, 82.952, 2012/05/08   10:0:4.04
-50.62596160,  67.01225911, 82.952, 2012/05/08   10:0:5.04
这是完整的程序(如下)。它包含几个if语句。我试着把

printf( "Longitude, Latitude, Elevation , UTC Time\n");
在这两个if语句之前,我得到了相同的结果,每行都有四个单词的标题,而不是顶部只有一行

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "applanix_data.h"
#include "applanix_pos_out.h"

#define DEGREES2RADIANS  (3.141592654 / 180.0)

int output_group_1(FILE *fp,
               FILE *fpout,
               unsigned short myyear,
               unsigned short mymonth,
               unsigned short myday,
               double time_sod,
               double double_time_met)
{
struct applanix_data_group1 data1;
struct pospacsbet sbet;

  if(fread(&data1,sizeof(struct applanix_data_group1),1,fp)==1)
 {
    sbet.gpstime = time_sod;
    sbet.latitude = data1.latitude * DEGREES2RADIANS;
    sbet.longitude = data1.longitude * DEGREES2RADIANS;
    sbet.altitude = data1.altitude;
    sbet.x_velocity = data1.eVelocity;
    sbet.y_velocity = data1.nVelocity;
    sbet.z_velocity = data1.dVelocity;
    sbet.roll = data1.aircraftRoll * DEGREES2RADIANS;
    sbet.pitch = data1.aircraftPitch * DEGREES2RADIANS;
    sbet.platform_heading = data1.aircraftHeading * DEGREES2RADIANS;
    sbet.wander_angle = data1.aircraftWanderAngle * DEGREES2RADIANS;
    sbet.x_body_acceleration = data1.aircraftTransverseAcceleration;
    sbet.y_body_acceleration = data1.aircraftLongitudinalAcceleration;
    sbet.z_body_acceleration = data1.aircraftDownAcceleration;
    sbet.x_body_angular_rate = data1.aircraftAngularRateAboutDownAxis;
    sbet.y_body_angular_rate = data1.aircraftLongitudinalAcceleration;
    sbet.z_body_angular_rate = data1.aircraftAngularRateAboutDownAxis;

    if(fwrite(&sbet,sizeof(struct pospacsbet),1,fpout)!=1)
      {
         fprintf(stderr,"Error writing POSPAC SBET output!\n");
         exit(-2);
      }

    sbet.latitude1 = sbet.latitude * (180/3.141592654);
    sbet.longitude1 = sbet.longitude * (180/3.14592654);
    sbet.day = sbet.gpstime/86400;
    sbet.time = sbet.gpstime/86400;
    sbet.hour1 = (sbet.time - sbet.day);
    sbet.hour = sbet.hour1*24;
    sbet.time = sbet.hour1*24;
    sbet.minute1 = (sbet.time - sbet.hour);
    sbet.minute = sbet.minute1*60;
    sbet.time = sbet.minute1 * 60;
    sbet.second1 = (sbet.time - sbet.minute);
    sbet.second = sbet.second1*60;

    printf("%12.8f, %12.8f, %6.3f, %04u/%02u/%02u   %i:%i:%4.2f\n",sbet.longitude1,sbet.latitude1,sbet.altitude,myyear,mymonth, myday, sbet.hour, sbet.minute, sbet.second);
    return 0;
 }
  else
 return -1;
}
#包括
#包括
#包括
#包括“applanix_data.h”
#包括“applanix\u pos\u out.h”
#定义度2半径(3.141592654/180.0)
int输出组1(文件*fp,
文件*fpout,
未签名的短myyear,
未签名的短mymonth,
未签名的短myday,
双倍时间,
双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双双
{
结构applanix_数据_组1数据1;
结构pospacsbet-sbet;
if(fread(&data1,sizeof(struct applanix_data_group1),1,fp)=1)
{
sbet.gpstime=时间;
sbet.latitude=数据1.latitude*度2半径;
sbet.longitude=data1.longitude*DEGREES2RADIANS;
sbet.高度=数据1.高度;
sbet.x_速度=数据1.eVelocity;
sbet.y_速度=数据1.n概率;
sbet.z_速度=数据1.dVelocity;
sbet.roll=数据1.飞机roll*度数2半径;
sbet.pitch=数据1.飞机俯仰*度2半径;
sbet.platform_heading=数据1.飞机航向*度数2半径;
sbet.wander_angle=数据1.飞机WanderAngle*度数2半径;
sbet.x_机身加速度=数据1.飞机横向加速度;
sbet.y_机身加速度=数据1.飞机纵向加速度;
sbet.z_机身加速度=数据1.飞机下降加速度;
sbet.x_机身_角速率=数据1.飞机关于下降轴的角速率;
sbet.y_机身_角速度=数据1.飞机纵向加速度;
sbet.z_机身_角速率=数据1.Aircraft角速率关于下降轴;
if(fwrite(&sbet,sizeof(struct pospacsbet),1,fpout)!=1)
{
fprintf(stderr,“写入POSPAC SBET输出时出错!\n”);
出口(-2);
}
sbet.latitude1=sbet.latitude*(180/3.141592654);
sbet.longitude1=sbet.longitude*(180/3.14592654);
sbet.day=sbet.gpstime/86400;
sbet.time=sbet.gpstime/86400;
sbet.hour1=(sbet.time-sbet.day);
sbet.hour=sbet.hour1*24;
sbet.time=sbet.hour1*24;
sbet.minute1=(sbet.time-sbet.hour);
sbet.minute=sbet.minute1*60;
sbet.time=sbet.minute1*60;
sbet.second1=(sbet.time-sbet.min);
sbet.second=sbet.second1*60;
printf(“%12.8f、%12.8f、%6.3f、%04u/%02u/%02u%i:%i:%4.2f\n”、sbet.longitude1、sbet.latitude1、sbet.aights、myyear、mymonth、myday、sbet.hour、sbet.minute、sbet.second);
返回0;
}
其他的
返回-1;
}
我这样调用函数

unix>gcc-o applanixraw2out applanixraw2out.c

unix>/applanixraw2在
如果(fread…
)之前,使用格式化的标题,而不是applanix\u raw\u 20120508.bin>test.txt

printf("Longitude,   Latitude,   Elevation,   UTC Time\n");
printf("%-12s, %-12s, %-6s, %-12s\n", "Longitude", "Latitude", "Elevation", "UTC Time");
然后,您可以很容易地调整间距,以匹配您的大多数应用程序

printf("%12.8f, %12.8f, %6.3f ...

看看我的简单库libTprint:,它完全符合您的要求。看看代码——它非常简单,您应该能够理解它是如何工作的


希望能有帮助!

printf(“经度、纬度、海拔、UTC时间”\n”);
也许我没有理解。如果一条新线是你所不能发出的,你是如何管理
printf的(“12.8f、%12.8f、%6.3f、%04u/%02u/%02u%I:%I:4.2f\n”,…
?您是否使用任何类型的循环?因为您会说,它每行都会打印。只需在循环开始打印标题之前使用
printf
。我添加了程序的其余部分以供参考。请发布代码的一部分,您也可以在其中调用此函数。这几乎是我想要的,但这会增加经度、纬度和海拔高度ion,UTC时间,在每一行上都高于其各自的值。我只希望在最顶端有一行。这一定是因为它在一个循环中?如果是这样,请将标题放在循环之前…不要忘记结尾的“\n”。这不起作用,(我的意思是它起作用,只是不是我要找的)我的意思是我仍然得到“经度等”每一行上的行。我只希望它位于输出的最上面一行是的,当然,当我在“if(fread…,”之前说的时候,我应该说在调用函数
output\u group\u 1()的循环之外
,可能是在成功打开
文件*fp
之后。顺便说一句:推荐一个更好的PI,可以是math.h或3.1415926535897932384626433832795BTW2中的M_PI:您想要'sbet.time=sbet.gpstime%86400'吗?'%'而不是'/'?
printf("%12.8f, %12.8f, %6.3f ...