fprintf在c

时间:2016-09-16 01:13:22

标签: c printf

我试图将一些数据从GPS存储到txt文件。问题是,在停止程序之后首先.txt文件是空的,但是知道,当我运行代码时,它就像进入无限的bucle并且不会在屏幕或.txt文件中打印数据。

char add_aux_XS[50],file_name_XS[256],file_txt_name_XS[256];
FILE *Ublox_text;

char * txt_file_UB() {
    printf("Name of txt file (include extension txt): \n");

    scanf("%s",file_name_UB);

    strcpy(add_aux_UB,"/home/debian/Desktop/Comunicacion/gps/");

    sprintf(add_UB,"%s%s",add_aux_UB,file_name_UB); 

    return add_UB;
}

main()
{
    file_txt_UB=txt_file_UB();
    for(i=0;i<256;i++){file_txt_name_UB[i]=*(file_txt_UB+i);}
    Ublox_text=fopen(file_txt_name_UB,"w");
    fprintf(Ublox_text,"\n");

    Ublox_UART=Conf_Ublox();
    while(1)
    {
        struct UBLOX_message Read_UB=Reading_UBLOX(Ublox_UART);
        printf("Valid: %c \t lat: %lf \t lon: %lf \t north: %lf \t east: %lf \n",
            Read_UB.valid,Read_UB.lat,Read_UB.lon,Read_UB.north,Read_UB.east);

        fprintf(Ublox_text,"%c \t %lf \t %lf \t %lf \t %lf \n",
            Read_UB.valid,Read_UB.lat,Read_UB.lon,Read_UB.north,Read_UB.east); 
    }       
    fclose(Ublox_text);     
    close_Ublox();
}

当我评论fprintf行时,程序正常,并在屏幕上打印传感器值。

1 个答案:

答案 0 :(得分:1)

看起来很直接 - 我有一个无限的while (1)循环,所以它永远不会结束。

如果您中止该程序,则所有缓冲的写入都被丢弃,因为从未到达fclose

你可以在循环中添加fflush(),以便每次都能写入它,但这会大大减慢速度(有一个原因,操作系统通常会缓冲你所有的写作)。但更好的解决方案是纠正无限循环,因此它会在某个时间点结束。