Запись в .txt из C

0

Я делаю программу в C++, которая должна записать значение переменной (температуры) в.txt.

Предположим, что я хочу постоянно вставлять значение этой переменной в файл.txt в новые строки. Этот файл file.txt должен выглядеть примерно так:

  • 37,0
  • 36,0
  • 37,1

БЕЗ пустой новой строки ниже последнего значения (37.1). Файл должен заканчиваться рядом с последним значением, а не ниже, в этом примере, рядом с 1. НО, если в файл будут вставлены новые данные, я хотел бы вставить это ниже (37.1), например:

  • 37,0
  • 36,9
  • 37,1
  • 38.0 (Новые данные).

Im сделал этот код, но я не знаю, как поместить новые данные в новую строку, не создавая пустую новую строку ниже последнего значения.

#include <stdio.h>
#include <"eHealth.h>

int main(){
   while(1){
      float temperature = eHealth.getTemperature();
      FILE *myData;
      myData=fopen("file.txt","a");
      fprintf(myData,"%f",temperature);
      fprintf("%\n");
      fclose(myData);
      }
   return(0);
}

Спасибо!

  • 6
    Поставьте новую строку перед фактическими данными, кроме первой строки. Псевдокод: if (!file.empty) { fprintf(file, "\n"); } fprintf(file, "data");
  • 1
    Кроме того, это C, а не C ++. Кроме того, просто return 0; , не return(0); , Это не функция.
Показать ещё 6 комментариев
Теги:

1 ответ

0
Лучший ответ

Когда вы запрашиваете , ваш код должен выглядеть так:

#include <ofstream>
#include <chrono>
#include <thread>

int main() {
    std::ofstream out("file.txt");
    bool firstLine = true;
    while(1) { // consider some reasonable shutdown condition, but simply 
               // killing the process might be sufficient
        float temperature = eHealth.getTemperature();

        if(!firstLine) {
            out << std::endl;
        }
        else {
            firstLine = true;
        }
        out << temperature;
        out.flush();

        // Give other processes a chance to access the CPU, just measure every
        // 5 seconds (or what ever is your preferred rate)
        std::this_thread::sleep_for(std::chrono::milliseconds(5000));
    }
    return 0;
}

Для обычного выполните:

#include <stdio.h>
#include <unistd.h>

int main() {
    FILE *out = fopen("file.txt","a");
    if(out == NULL) {
        perror("Cannot open 'file.txt'");
        return 1;
    }

    bool firstLine = true;
    while(1) { // consider some reasonable shutdown condition, but simply 
               // killing the process might be sufficient
        float temperature = eHealth.getTemperature();
        if(!firstLine) {
            fprintf(out,"\n");
        }
        else {
            firstLine = true;
        }
        fprintf(out,"%f",temperature);
        fflush(out);

        // Give other processes a chance to access the CPU, just measure every
        // 5 seconds (or what ever is your preferred rate)
        sleep(5);
    }
    fclose(out);
    return 0;
}

В качестве подсказки: если вы тестируете свой код в системе типа * nix, вы можете просто использовать команду tail -f file.txt, чтобы узнать, делает ли ваша программа то, что она должна.

  • 0
    Эй г-макулик! это хранит данные, но все еще создает дополнительный пустой символ новой строки в конце .txt. Я пытаюсь это исправить, как сказал H2CO3!
  • 0
    @Bankoner Посмотрите мой обновленный ответ и примите его, если он соответствует вашему желаемому поведению (хотя это странно разработано, поскольку большинство потоковых программ, ориентированных на ввод, реагируют на '\ n', чтобы получить новые данные из строки).
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню