Лишние символы при записи в файл на Си

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

Также проблема с методом MaxFalling, который не находит максимальной значения из условий. В переменную s записываются лишние символы, а не значение, при чем с течением итераций цикла переменная s не меняется, а условие ни разу не выполняется.

Исходные данные, которые я использовал Первые две колонки - это снижение содержимого золотого в г чистого золота за 1929 и 1957 год Последняя - это падение покупательной способности

Функция MaxFalling() реализует 1ое задание: Найти валюту падение покупательной способности которой максимально

Dollar |1,5 |0,89 |52,4

Funt |7,32 |2,49 |31,6

Frank |0,059|0,002 |3,4

Yena |0,75 |0,025 |0,76

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <clocale>
#include <cstdio>
#include <windows.h>

struct Economy {

    char currName[20];
    double reduction29;
    double reduction57;
    double falling;

}economy;

FILE* file;
int N = 0;

void FileInput();
void FileOutPut();
void Sort();
void MaxFalling();
void ReductionMoreThan_1();


int main()
{
    system("chcp 1251");
    setlocale(LC_ALL, "rus");
    FILE* file;
    int n = 0;
    char buffer[255];


    file = fopen("data.txt", "w+");
    fclose(file);

    FileInput();

    FileOutPut();

    MaxFalling();
    /*ReductionMoreThan_1();
    Sort();*/


}



void FileInput() {
    char  str[6], str1[6], str2[6];
    int i = 0;
    if ((file = fopen("data.txt", "w")) == NULL) {
        printf("Ошибка открытия файла");
    }

    while (i < 4) {
        printf("Валюта:");
        gets_s(economy.currName);
        if (strcmp(economy.currName, "") != 0) {
            N++;
            fwrite(economy.currName, sizeof(economy.currName), 1, file);
            printf("Снижение в 1929:");
            gets_s(str);
            fwrite(str, sizeof(economy.reduction29) + 1, 1, file);
            printf("Снижение в 1957:");
            gets_s(str2);
            fwrite(str2, sizeof(economy.reduction57) + 1, 1, file);
            printf("Падение:");
            gets_s(str1);
            fwrite(str1, sizeof(economy.falling) + 1, 1, file);
            fwrite("\n", sizeof(char), 1, file);
        }
        i++;
    }

    printf("Все данные записаны в файл data.txt\n");
    fclose(file);

    if ((file = fopen("data.txt", "r+")) == NULL) {
        printf("Ошибка открытия файла");
    }
}

void FileOutPut() {
    int uk, i;
    char str[6], str1[6], str2[6];
    fseek(file, 0, SEEK_END);
    uk = ftell(file);
    i = 0;

    while (i < uk) {
        fseek(file, i, SEEK_SET);
        fread(economy.currName, sizeof(economy.currName), 1, file);
        fread(str, sizeof(economy.reduction29) + 1, 1, file);
        fseek(file, ftell(file), SEEK_SET);
        fread(str2, sizeof(economy.reduction57) + 1, 1, file);
        fseek(file, ftell(file), SEEK_SET);
        fread(str1, sizeof(economy.falling) + 1, 1, file);
        printf("\n%s %s %s %s", economy.currName, str, str2, str1);
        i += sizeof(economy) + 1;
    }

    fclose(file);
}

void MaxFalling() {
    double max = 0;
    int i = 0, uk;
    char str[30], s[10];
    fseek(file, 0, SEEK_END);
    file = fopen("data.txt", "a+");
    uk = ftell(file);
    while (i < uk) {
        fseek(file, i, SEEK_SET);
        fread(economy.currName, sizeof(economy.falling), 1, file);
        fread(s, sizeof(economy.falling), 1, file);
        economy.falling = atof(s);
        fseek(file, ftell(file) + 1, SEEK_SET);
        fread(economy.currName, sizeof(economy.currName), 1, file);
        if (economy.falling > max) {
            max = economy.falling;
            strcpy(str, economy.currName);
        }
        i += sizeof(economy) + 1;
    }
    printf("У %s наибольшее падение покупательной способности(%lf)", str, max);
}


void ReductionMoreThan_1() {
    double max = 0;
    int i = 0, uk;
    char str[30], s[10];
    fseek(file, 0, SEEK_END);
    uk = ftell(file);
    printf("Валюты с снижением в 1929 году больше 1.0:\n");
    while (i < uk) {
        fseek(file, i, SEEK_SET);
        fread(economy.currName, sizeof(economy.reduction29), 1, file);
        fread(s, sizeof(economy.reduction29), 1, file);
        economy.reduction29 = atof(s);
        fseek(file, ftell(file) + 1, SEEK_SET);
        fread(economy.currName, sizeof(economy.currName), 1, file);
        if (economy.reduction29 > 1.0) {
            max = economy.reduction29;
            strcpy(str, economy.currName);
            printf("%s\n", str);
        }
        i += sizeof(economy) + 1;
    }
}

void Sort() {
    int i = 0, pos, j;
    char s1[10], s[10];
    struct Economy econom;
    fseek(file, 0, SEEK_SET);

    while (i < ((sizeof(economy) + 1) * (N - 1))) {
        fseek(file, i, SEEK_SET);
        fread(economy.currName, sizeof(economy.currName), 1, file);
        fread(s, sizeof(economy.reduction57), 1, file);
        fseek(file, ftell(file) + 1, SEEK_SET);
        j = i + sizeof(economy) + 1;
        while (j < ((sizeof(economy) + 1) * N)) {
            fseek(file, j, SEEK_SET);
            fread(econom.currName, sizeof(econom.currName), 1, file);
            fread(s1, sizeof(econom.reduction57), 1, file);
            fseek(file, ftell(file) + 1, SEEK_SET);
            if ((atof(s) > 1 && atof(s1) > 1) && (s < s1)) {
                pos = i;
                fseek(file, pos, SEEK_SET);
                fwrite(econom.currName, sizeof(econom.currName), 1, file);
                fwrite(s1, sizeof(econom.reduction57) + 1, 1, file);
                pos = j;
                fseek(file, pos, SEEK_SET);
                fwrite(economy.currName, sizeof(economy.currName), 1, file);
                fwrite(s, sizeof(economy.reduction57) + 1, 1, file);
                strcpy(s, s1);
                strcpy(economy.currName, econom.currName);
            }
            j += sizeof(economy) + 1;
        }
        i += sizeof(economy) + 1;
    }

}



Ответы (0 шт):