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