2016-09-16 3 views
0

Я пытаюсь сохранить некоторые данные из GPS в txt-файл. Проблема в том, что сначала .txt-файл был пуст после того, как вы остановили программу, но знаете, когда я запускаю код, он как бы вводит бесконечный кучер и не печатает мне данные на экране или в .txt-файле.fprintf дает мне пустой файл в c

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 линию, программа КИ и печать на экране значения датчика.

+0

Копирование неинициализированной строки над собой с помощью 'for (i = 0; i <256; i ++) {file_txt_name_UB [i] = * (file_txt_UB + i);}' фактически не инициализирует его с пользой. Ваша функция 'text_file_UB()' использует всевозможные неопределенные переменные - это нехорошо. Вам нужно прочитать о том, как создать MCVE ([MCVE]), а затем изменить свой вопрос, чтобы он стал одним из них. –

ответ

1

Кажется довольно прямолинейным для меня - у вас бесконечная петля while (1), поэтому она никогда не кончится.

Если вы прекратите выполнение программы, все буферизованные записи будут отброшены, так как fclose так и не был достигнут.

Вы можете добавить fflush() внутри цикла, чтобы получить его каждый раз, но это значительно замедлит работу (есть причина, по которой ОС обычно буферизует всю вашу запись). Но лучшим решением является исправить бесконечный цикл, поэтому он заканчивается в какой-то момент времени.

+0

Спасибо за ваш ответ. Проблема в том, что мне нужно постоянно читать GPS во время теста, и я не знаю, как долго может пройти тест, это может быть одна минута, так как это может быть один час, поэтому я использую и бесконечный цикл. –

+0

Замедление вниз может быть не плохо. Если 'Reading_UBLOX()' быстро, вы получите * lot * вывода. Попробуйте добавить 'fflush (Ublox_text)' в цикле и посмотреть, что произойдет. Если это слишком сильно замедляет работу, подумайте о вызове 'fflush()' один раз для каждых N итераций. –

+0

@JuanBravo: Как ваша программа узнает, когда тест закончен? Кажется, вы не проверяете значение, возвращаемое 'Reading_UBLOX()', что означает, что вы не обращаете внимания на любые сообщения об ошибках или обычные события, такие как EOF. В соответствии с этим ваша программа должна быть отправлена ​​угрозам смерти (сигналы, такие как прерывания), чтобы она остановилась. Вряд ли элегантный. –

Смежные вопросы