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