Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Lyuthe
0 / 0 / 0
Регистрация: 07.10.2016
Сообщений: 52
1

Неопределённое поведение моей программы с файловым вводом-выводом

19.11.2016, 19:35. Просмотров 326. Ответов 0
Метки нет (Все метки)

Для N = 2, вводишь два элемента структуры и всё выводится правильно. Водишь второй раз -- первый останется прежним, второй заменится первым введённым заново. Если N =3, то вообще выводится первый элемент и два третьих.
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <stdio.h>
#include <locale.h>
#include <math.h>
#include <string.h>
#define N 2 
#define s "   Наименование  |  Поставщик  |Кол-во |Цена (шт)| Хранится |Цена (всего)| Уценка 1 |  Уценка |Прсроч|Цена прсроч |"
#define line "\n-------------------------------------------------------------------------------------------------------------------"
struct tort
    {   
        char name[16];
        char post[12];
        float price1;
        float price2;
        float uc1;
        float uc2;
        int kprsr;
        float prsr;
        int sg;
        int k;
        int ub;
    } M[N];
    
    
    void fvvod()
{
    FILE *fptz;
    fptz=fopen("Baza2.bd", "a");
    int i;
    for (i=0; i<N; i++)
    {
    M[i].prsr=0;
    M[i].uc1=0;
    M[i].uc2=0;
    M[i].kprsr=0;
    }
    for (i=0; i<N; i++)
    {
        printf("\n Название товара: ");
        scanf("%s", &M[i].name);
        printf("\n Поставщик товара: ");
        scanf("%s", &M[i].post);
        printf("\n Количество: ");
        scanf("%d", &M[i].k);
        printf("\n Цена за единицу товара: ");
        scanf("%f", &M[i].price1);
        printf("\n Дней на складе ");
        scanf("%d", &M[i].sg);
 
        fwrite(&M[i], sizeof(tort), 1, fptz);
    } fclose(fptz);
    
}
 
void fvivod()
{
    FILE *fin, *fout;
    fin=fopen("Baza2.bd", "r");
    fout=fopen("Print2.txt", "a");
    printf(s line);
    fprintf(fout, s line);     
               
    int i;         
        
    for (i=0; i<N; i++){
     fread(&M[i], sizeof(tort), 1, fin);
    M[i].price2=(M[i].price1)*(M[i].k);
    if (M[i].sg==3) {
    (M[i].uc1=(M[i].price1)*0.5); (M[i].uc2=(M[i].price2)*0.5);}
    if (M[i].sg>3) (M[i].kprsr=M[i].k);
    M[i].prsr=M[i].kprsr*M[i].price1;   
     printf("\n %-16.15s| %-12.12s| %6d| %8.2f| %9d|%12.2f| %9.2f|%9.2f|%6d|%12.2f|", M[i].name,  M[i].post, M[i].k, M[i].price1, M[i].sg, M[i].price2, M[i].uc1, M[i].uc2, M[i].kprsr,M[i].prsr );
     fprintf(fout, "\n %-16.15s| %-12.12s| %6d| %8.2f| %9d|%12.2f| %9.2f|%9.2f|%6d|%12.2f|", M[i].name,  M[i].post, M[i].k, M[i].price1, M[i].sg, M[i].price2, M[i].uc1, M[i].uc2, M[i].kprsr,M[i].prsr );
     fread(&M[i], sizeof(tort), 1, fin);
    }
    fclose(fin), fclose(fout);
    
                          
 
}
 
main()
{
    setlocale(LC_ALL, "Rus");
    int key;
    do
    {
        printf("\n \n ***МЕНЮ ПРОГРАММЫ*** \n");
        printf("\n 0 - Ввод");
        printf("\n 1 - Вывод");
        printf("\n 2 - Выход из программы");
        printf("\n Введите номер: ");
        scanf("%d",&key);
    
    switch(key)
        {
        case 0: fvvod(); break;
        case 1: fvivod(); break;
        case 2: break;
        default: printf("\n Введите, пожалуйста, другой номер");
    }
        } 
    while(key!=2);
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2016, 19:35
Ответы с готовыми решениями:

Ошибка с вводом/выводом
Qt компилирует, но в процессе исполнения программа закрывается с ошибкой. void main(void) { ...

Структура системы управления вводом-выводом
Помогите, пожалуйста, глупой девушке-программисту. Изучаю совсем недавно Unix.Совсем не мое.Но...

Ошибка с вводом и выводом(указателями) массива
Здравствуйте. Что мне надо сделать: Создать массив с использованием указателя. Заполнить...

Написать программу с вводом выводом вектора через отдельные процедуры
Написать прогу с вводом выводом вектора через отдельные процедуры.Вектор объявить глобально (...

Помогите с файловым вводом-выводом!!!
Пишу программу которая читает строки из файла и заносит их в массив comboBox1.Items. Вот только не...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2016, 19:35

Работаем с файловым вводом/выводом
Помогите пожалуйста решить две задачки. остальные сделал. 1)Дан текстовый файл. Напечатать все...

Обработка одномерных массивов с файловым вводом выводом
дан массив размера N и целые числа K и L (1&lt;=K&lt;=L&lt;=N). Найти сумму элементов массива с номерами от...

Заменить консольный ввод-вывод файловым вводом выводом
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; struct Address { string Index;...


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

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

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