Работа с бинарным файлом - на вывод поступает мусор - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Есть структуры вида
struct Note
{
    char date[20];
    int temp;
    struct Note *next;
};
 
struct Pointer
{
    Note * first;
    Note * last;
};
Я ввожу данные с клавиатуры и добавляю в структуру. Далее вывожу данные в бинарный файл:
void vyvod_bin(struct Pointer &P)
{
    FILE *f;
    char bin[] = "binary.txt";
    if (!P.first)
        printf("Error");
    else
    {
        Note *tmp = P.first;
        f = fopen(bin, "w+");
        if (f == NULL)
            printf("Error");
        else
        {
            while (tmp)
            {
                fwrite(&tmp->date, sizeof(tmp->date), 1, f);
                fwrite(&tmp->temp, sizeof(tmp->temp), 1, f);
                tmp=tmp->next;
            }
        }
        fclose(f);
    }
}
И потом из двоичного файла вывожу данные на экран:
void add_to_end2(struct Pointer &P)
{
    char date[20];
    int temp;
    FILE *f;
    char bin[] = "binary.txt";
    f = fopen(bin, "wb+");
    while (!feof(f))
    {
        fread(&date, sizeof(date), 1, f);
        fread(&temp, sizeof(temp), 1, f);
        printf("%s %d", date, temp);
    }
    fclose(f);
}
Проблема в том, что когда вывожу из бинарного файла выводится какая-то чушь вида "ММММММММММММММММММёяы -85556137" Помогите найти ошибку. Заранее спасибо.
С выводом из файла разобрался, нужно было поменять режим файла. Появилась другая проблема: при выводе из файла последний элемент выводится дважды. И вроде бы понятно, что раз выводится два раза, то, скорее всего, в конце текстового файла присутствует пробел. Так и есть, но я не понимаю, откуда он там взялся и как его убрать. Или вовсе не в пробеле дело

Разобрался, не актуально

Решение задачи: «Работа с бинарным файлом - на вывод поступает мусор»

textual
Листинг программы
if (strcmp(date, "") != 0)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.615 из 5
Похожие ответы