Форматирование вывода на экран - C (СИ)

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

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

Здравствуйте. Встал в ступор.. Произвожу запись из текстового файла в структуру, затем содержимое структуры в бинарный файл. После чего вывожу содержимое бинарного файла на экран. В итоге, первые 2 строки выводятся некорректно, а вот остальные 8 корректно. Подскажите, что не так? Буду рад любой подсказке. Заранее спасибо.
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
#include <Windows.h>
 
struct product
{
    char name[15];
    char weight[8];
    char value[7];
    char date[5];
    int date1;
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251); 
 
    setlocale(LC_ALL, "Russian");
 
    FILE *products, *prod;
 
    struct product food;
 
    prod = fopen("fileb.dat", "w+");
    if ((products = fopen("products.txt", "r")) != NULL)
    {
        while (fgets(food.name, 15, products) != NULL)
        {
            fgets(food.weight, 8, products);
            fgets(food.value, 7, products);
            fgets(food.date, 5, products);
            fscanf_s(products, "%d", &food.date1);
            
            fwrite(&food, sizeof(food), 1, prod);
        }
    }
 
    rewind(prod);
    fread(&food, sizeof(food), 1, prod);
    while (!feof(prod))
    {
        printf("%s%s%s%s%d", food.name, food.weight, food.value, food.date, food.date1);
        fread(&food, sizeof(food), 1, prod);
    }
    fclose(products);
    fclose(prod);
 
    system("pause");
    return 0;
}
Молоко 1л. 50р. 10 2 Рыба 1кг. 58р. 5 1 Сахар 1кг. 35р. 365 6 Хлеб 400гр. 25р. 5 1 Тушенка 300гр. 125р. 365 100 Чай 250гр. 67р. 365 128 Сметана 200гр. 50р. 10 2 Кефир 1л. 55р. 10 2 Творог 500гр. 125р. 15 1 Мороженое 1кг. 150р. 30 15 не получается передать точь-в-точь как в txt, пробелы пропадают.. Под название выделено 15 символов, под вес 8, под цену 7 и под дату 5, а пятый столбец это кол-во дней до истечения срока годности..
Если нужно скину конечный результат..

Решение задачи: «Форматирование вывода на экран»

textual
Листинг программы
    prod = fopen("fileb.dat", "wb+");
    if ((products = fopen("products.txt", "r")) != NULL)
    {
        while (fscanf(products, "%s%s%s%s%d", food.name, food.weight, food.value, food.date, &food.date1) == 5)
        {
            fwrite(&food, sizeof(food), 1, prod);
        }
    }
 
    rewind(prod);
    while (fread(&food, sizeof(food), 1, prod) == 1)
    {
        printf("%s%s%s%s%d", food.name, food.weight, food.value, food.date, food.date1);
    }

Объяснение кода листинга программы

  1. prod = fopen(fileb.dat,wb+); - открывает файл fileb.dat для записи в бинарном формате.
  2. if ((products = fopen(products.txt,r)) != NULL) - открывает файл products.txt для чтения.
  3. while (fscanf(products,%s%s%s%s%d, food.name, food.weight, food.value, food.date, &food.date1) == 5) - считывает данные из файла products.txt в переменную food.
  4. fwrite(&food, sizeof(food), 1, prod); - записывает данные из переменной food в файл fileb.dat.
  5. rewind(prod); - возвращает указатель чтения в начало файла fileb.dat.
  6. while (fread(&food, sizeof(food), 1, prod) == 1) - считывает данные из файла fileb.dat в переменную food.
  7. printf(%s%s%s%s%d, food.name, food.weight, food.value, food.date, food.date1); - выводит данные из переменной food на экран.

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


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

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

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