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

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

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

Здравствуйте. Встал в ступор.. Произвожу запись из текстового файла в структуру, затем содержимое структуры в бинарный файл. После чего вывожу содержимое бинарного файла на экран. В итоге, первые 2 строки выводятся некорректно, а вот остальные 8 корректно. Подскажите, что не так? Буду рад любой подсказке. Заранее спасибо.
Листинг программы
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <locale.h>
  5. #include <time.h>
  6. #include <Windows.h>
  7. struct product
  8. {
  9. char name[15];
  10. char weight[8];
  11. char value[7];
  12. char date[5];
  13. int date1;
  14. };
  15. int main()
  16. {
  17. SetConsoleCP(1251);
  18. SetConsoleOutputCP(1251);
  19. setlocale(LC_ALL, "Russian");
  20. FILE *products, *prod;
  21. struct product food;
  22. prod = fopen("fileb.dat", "w+");
  23. if ((products = fopen("products.txt", "r")) != NULL)
  24. {
  25. while (fgets(food.name, 15, products) != NULL)
  26. {
  27. fgets(food.weight, 8, products);
  28. fgets(food.value, 7, products);
  29. fgets(food.date, 5, products);
  30. fscanf_s(products, "%d", &food.date1);
  31. fwrite(&food, sizeof(food), 1, prod);
  32. }
  33. }
  34. rewind(prod);
  35. fread(&food, sizeof(food), 1, prod);
  36. while (!feof(prod))
  37. {
  38. printf("%s%s%s%s%d", food.name, food.weight, food.value, food.date, food.date1);
  39. fread(&food, sizeof(food), 1, prod);
  40. }
  41. fclose(products);
  42. fclose(prod);
  43. system("pause");
  44. return 0;
  45. }
Молоко 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
Листинг программы
  1.     prod = fopen("fileb.dat", "wb+");
  2.     if ((products = fopen("products.txt", "r")) != NULL)
  3.     {
  4.         while (fscanf(products, "%s%s%s%s%d", food.name, food.weight, food.value, food.date, &food.date1) == 5)
  5.         {
  6.             fwrite(&food, sizeof(food), 1, prod);
  7.         }
  8.     }
  9.  
  10.     rewind(prod);
  11.     while (fread(&food, sizeof(food), 1, prod) == 1)
  12.     {
  13.         printf("%s%s%s%s%d", food.name, food.weight, food.value, food.date, food.date1);
  14.     }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы