Как я могу добавить самую первую строку файла .txt, используя C? - PullRequest
0 голосов
/ 07 августа 2020

У меня есть программа, в которой я пытаюсь добавить данные ветра в файл .txt, но я сталкиваюсь с проблемой, когда я добавляю данные, я закрываю программу, пытаюсь добавить данные снова, и это устраняет остальную часть данные. Ниже приведен пример файла .txt:

3
3.60000 N
4.30000 E
5.40000 S

Первая строка - это количество записей данных, а далее - каждая скорость ветра, а затем направление ветра.

Мой код работает хорошо, если я просто добавлю данные один раз и закончу с ними, но не если я хочу добавить больше работы к тому, что я делал раньше. Я знаю, что могу использовать append для добавления данных в конец, но он не будет обновлять счетчик вверху. Я хочу иметь возможность добавлять данные, а также обновлять счетчик вверху. Мне нужен счетчик для других функций в коде. Вот мой код проблемы:

void addWindData(FILE* outFile, int numNumbers, double windSpd[], char windDir[]){
    int numItems;
    
    printf("How many data items would you like to add? ");
    scanf("%d", &numItems);

    fprintf(outFile, "%d \n", numItems);

    for(int i = 0; i < numItems; i++){
        printf("Wind speed? ");
        scanf("%lf", &windSpeed[i]);

        printf("Wind direction? ");
        scanf(" %c", &windDir[i]);

        fprintf(outFile, "%lf %c \n", windSpd[i], windDir[i]);
    }
}

Я вызываю функцию следующим образом:

fp = fopen(FILE_NAME, "w");
if(fp == NULL){
    printf("File could not be found! \n");
}
else{
    addWindData(fp, numNumbers, windSpd, windDir);
    fclose(fp);
}

Любая помощь, которую я могу получить, будет принята с благодарностью. Я понимаю, что 'w' всегда будет писать, но когда я использую append, он начинает новый счет в конце, а затем добавляет данные. Мне просто нужна помощь, чтобы разобраться, как обновить счетчик! Я новичок в языке программирования C и все еще стараюсь учиться. Я изо всех сил стараюсь использовать лог c и рассуждения, поэтому это помогает мне черпать вдохновение у других! Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

вы можете изменить fp = fopen(FILE_NAME, "w") на fp = fopen(FILE_NAME, "r+"), потому что режим w удалит предыдущий текст в файле .txt, но r + этого не сделает, потому что r - это режим обновления.

0 голосов
/ 07 августа 2020

Файл открыт как поток, поэтому у вас есть 2 варианта: изменить символы или перезаписать весь файл. Вы должны знать, что вы можете изменять только существующие символы! Поскольку ссылка fopen говорит, что для изменения символов вы можете использовать режим «r +». Этот режим позволяет читать / писать, запускается с начала и позволяет перематывать .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...