c - fprintf 给我一个 c 中的空白文件

标签 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 行时,程序正常并在屏幕上打印传感器值。

最佳答案

对我来说似乎很简单 - 你有一个无限的 while (1) 循环,所以它永远不会结束。

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

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

关于c - fprintf 给我一个 c 中的空白文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39522480/

相关文章:

c - 这是 3 的输出谁能告诉我怎么做?

c - m 的静态声明遵循非静态声明

c - 将带有参数的函数传递给信号处理程序?

c - 在不更改 x87 寄存器的情况下进行十进制除法

php - 远程服务器上的 exec() 仅返回 return-var 1 |尝试了7种方法但没有成功

c - 这个 printf 是什么意思?

c - -m32 在参数为 unsigned long long 时给出无法解释的问题

c - 使用 gcovr Linux 和 perl 的自动覆盖测试 C 程序

printf() 能否为值 (-0.5) 生成 "-.5"?

c++ - 如何在 C 中使用 printf() 格式化在 double 前面保留空格