Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 01.11.2016
Сообщений: 89
1

Форматирование вывода на экран

16.02.2017, 19:34. Просмотров 1000. Ответов 11
Метки нет (Все метки)

Здравствуйте.
Встал в ступор..
Произвожу запись из текстового файла в структуру, затем содержимое структуры в бинарный файл.
После чего вывожу содержимое бинарного файла на экран. В итоге, первые 2 строки выводятся некорректно, а вот остальные 8 корректно. Подскажите, что не так? Буду рад любой подсказке. Заранее спасибо.

Код

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#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, а пятый столбец это кол-во дней до истечения срока годности..


Добавлено через 2 часа 0 минут
Если нужно скину конечный результат..

Добавлено через 7 часов 20 минут
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.02.2017, 19:34
Ответы с готовыми решениями:

Форматирование вывода
printf(&quot;%*s&quot;,strlen(name_string),name_string) компилятор жалуться что strlen() возвращает не тот...

Форматирование в функции вывода изменяет выводимые данные?
#include &lt;stdio.h&gt; int main() { float a=199; printf(&quot; %f and %i&quot;, a, a); getchar();...

Форматирование вывода на экран
Привет, подскажите как в Java можно вывести такое, есть шеснаторичная система, и имет такой к...

Форматирование вывода
Есть такой код, который ищет первый минимальный элементы на пересечении строки и столбца: #include...

11
6908 / 5973 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
16.02.2017, 23:49 2
fscanf() везде используй. И "b" добавь в открытие первого файла.
0
0 / 0 / 0
Регистрация: 01.11.2016
Сообщений: 89
17.02.2017, 13:13  [ТС] 3
Везде эт где? Все gets'ы поменял на fscanf'ы, ошибка..

Добавлено через 45 минут
Вызвано исключение по адресу 0x0F7EE224 (ucrtbased.dll) в sem2lab21.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x01180000.
0
6908 / 5973 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
17.02.2017, 14:22 4
Программу показывай.
0
Модератор
Эксперт CЭксперт С++
3639 / 3295 / 579
Регистрация: 07.10.2015
Сообщений: 6,746
17.02.2017, 14:27 5
Цитата Сообщение от nmcf Посмотреть сообщение
Программу показывай.
nmcf, под спойдером
0
0 / 0 / 0
Регистрация: 01.11.2016
Сообщений: 89
17.02.2017, 15:07  [ТС] 6
Цитата Сообщение от nmcf Посмотреть сообщение
Программу показывай.
Результат:
Кликните здесь для просмотра всего текста
Форматирование вывода на экран

Входные данные(данные хранящиеся в txt.):
Кликните здесь для просмотра всего текста
Форматирование вывода на экран
0
nmcf
17.02.2017, 17:54
  #7

Не по теме:

Т. е. всё работает?

0
0 / 0 / 0
Регистрация: 01.11.2016
Сообщений: 89
17.02.2017, 19:00  [ТС] 8
Цитата Сообщение от nmcf Посмотреть сообщение
Не по теме:
Т. е. всё работает?
работает, но выводит некорректно..(пробелы не соблюдены и присутствуют лишние символы)
вывод должен выглядеть также, как в текстовом файле(нижний спойлер).
0
6908 / 5973 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
18.02.2017, 08:55 9
Покажи актуальный вариант с исправлениями.
0
0 / 0 / 0
Регистрация: 01.11.2016
Сообщений: 89
20.02.2017, 19:12  [ТС] 10
Цитата Сообщение от nmcf Посмотреть сообщение
Покажи актуальный вариант с исправлениями.
Т.е.? Что изменилось в коде? Ничего..
0
6908 / 5973 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
20.02.2017, 19:29 11
Лучший ответ Сообщение было отмечено Marihuana как решение

Решение

Цитата Сообщение от Marihuana Посмотреть сообщение
Что изменилось в коде? Ничего..
Ну так почему бездельничаешь? Я же сказал использовать fscanf().
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    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
0 / 0 / 0
Регистрация: 01.11.2016
Сообщений: 89
20.02.2017, 19:54  [ТС] 12
Спасибо большое!!!
Я использовал fscanf, но под каждый элемент структуры вызывал отдельный fscanf, поэтому была ошибка..
Еще раз большое спасибо за помощь!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2017, 19:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Форматирование вывода
Здравствуйте помогите разобраться с форматированием вывода, а то совсем беда( using System; using...

Форматирование вывода
Есть простенькая программа анализирующая частоту употребления слов в тексте, результат своей работы...

Форматирование вывода
почему правая граница оказывается на месте 20 знака? значение width=20,const int П.5.18.Правил ...

Форматирование вывода
Снова решаю тесты на сайте где изучаю курсы, и снова не совсем понятно, почему мой вариант не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.