Форматирование вывода на экран - 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
на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д