Форум программистов, компьютерный форум CyberForum.ru

Сформировать двоичный файл из элементов, заданной структуры "Абитуриент" - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Удалить элементы, перед которыми есть элемент с Tir больше 50000 http://www.cyberforum.ru/cpp-beginners/thread1183050.html
Вот написал как бы функцию, но она не так работает. Должно удалять элементы перед которыми есть элемент с Tir больше 50000, а но просто удаляет элементы с Tir больше 50000 Посмотрите исправте если можете void deletMore5(TBook * start) { TBook * pp,*wp; wp=start; pp=NULL; while(wp!=NULL){
C++ Нужен рабочий пример решения СЛАУ методом Гаусса Нужен рабочий (ну или более менее рабочий) код для решения СЛАУ методом Гауса на С++. Уже замучился искать http://www.cyberforum.ru/cpp-beginners/thread1183003.html
Перевести из паскаля нахождение строк с наибольшим количеством нулей C++
Var i,j,n,m,max,imax:integer; A:array of integer; Function Kol(i:integer):byte; Var j,k:integer; Begin k:=0; For j:=1 to m do if A=0 then inc(k); Kol:=k; End;
C++ Перевести из паскаля в с (подсчет отрицательных элементов)
Const n=6;m=5; Var A:array of real; B:array of byte;//для подсчёта кол-ва отрицательных i,j,imax:byte; Begin For i:=1 to n do Begin For j:=1 to m do Begin A:=random*10-5;
C++ Структура данных, запись в файл, её считывание http://www.cyberforum.ru/cpp-beginners/thread1182977.html
помогите срочно, данные не записываются в файл, ну и темболее не считываются #include <vcl.h> #pragma hdrstop #include <iostream.h> #include <fstream.h> #include <stdlib.h> #include <stdio.h> #include "Unit1.h" #include <string.h>
C++ Угадать число методом половинного деления Загадывается число от 1 до 1000 и компьютер его угадывает согласно подсказкам больше или меньше. Используем метод половинного деления. подробнее

Показать сообщение отдельно
ka_chu
 Аватар для ka_chu
2 / 2 / 3
Регистрация: 05.05.2015
Сообщений: 26
20.09.2015, 15:19     Сформировать двоичный файл из элементов, заданной структуры "Абитуриент"
Добрый день! Та же задача. Решаю по-своему, но в конце неодекватный результат. Когда я из уже записанного файла достаю информацию, чтобы посмотреть всё ли впорядке. Записываю её в новый массив структур rmas и распечатываю его содержимое. В итоге значения на экране появляются, как будто массив не заполнился правильно из файла. Неадекватные цифры и строки.
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// ConsoleApplication1.cpp : Defines the entry point for the console application.
//
#define _CRT_SECURE_NO_WARNINGS
 
#include "stdafx.h"
#include <iostream>
#include <cstdio>
#include <cstring>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    typedef struct {
        char familyname[30];
        char name[30];
        char fathername[30];
        int date;
        int marks[3];
        float avermark;
    }enrollee;
 
    FILE *f;
    enrollee man;
    enrollee mas[10];
 
    if ((f = fopen("enrollee.dat", "wb")) == NULL) exit(1);
    
    for (int i = 0; i < 5; i++){
        printf("New enrollee %d\n", i);
        printf("Familyname = ");  scanf("%s", &man.familyname);
        printf("Name = ");        scanf("%s", &man.name);
        printf("Fathername = ");  scanf("%s", &man.fathername);
        printf("date = ");        scanf("%d", &man.date);
        printf("marks (separated by spaces) = ");  scanf("%d %d %d", &man.marks[0], &man.marks[1], &man.marks[2]);
        printf("Average mark in school-leaving certificate = ");  scanf("%f", &man.avermark);
 
        fwrite(&man, sizeof(enrollee), 1, f);
        if (ferror(f) != NULL) exit(2);
    }
    fclose(f);
 
    if ((f = fopen("enrollee.dat", "rb")) == NULL) exit(3);
 
    int i = 0;
    while (!feof(f) && i < 5)
    {
        fread(&mas[i], sizeof(enrollee), 1, f);
        i++;
    }
    fclose(f);
 
    for (int i = 0; i < 5; i++){
        printf("\nNew enrollee %d\n", i);
        printf("Familyname = %s\n", mas[i].familyname);
        printf("Name = %s\n", mas[i].name);
        printf("Fathername = %s\n", mas[i].fathername);
        printf("date = %d\n", mas[i].date);
        printf("marks  = %d %d %d\n", mas[i].marks[0], mas[i].marks[1], mas[i].marks[2]);
        printf("Average mark in school-leaving certificate = %f\n", mas[i].avermark);
    }
 
    int numdel;
    printf("Input number of enrollee you want to delete. From 1 to 5. "); scanf("%d", &numdel);
    for (i = numdel - 1; i < 4; i++){
        mas[i] = mas[i + 1];
    }
 
    char familyadd[30];
    enrollee masnew[10];
    bool familyfound = false, familyinserted = false;
 
    printf("Input family name of enrollee after wich you want to add new one. "); scanf("%s", &familyadd);
 
    if ((f = fopen("enrollee.dat", "wb")) == NULL) exit(4);
 
    int j = 0;
    for (i = 0; i < 5; i++) {
        man = mas[i];
        if ((strcmp(mas[i].familyname, familyadd) == 0) && !familyfound) {
            familyfound = true;
            man = mas[j];
            j++;
        }
        else {
            if (familyfound && !familyinserted) {
                printf("i = %d\n", i);
                printf("Familyname = ");  scanf("%s", &man.familyname);
                printf("Name = ");        scanf("%s", &man.name);
                printf("Fathername = ");  scanf("%s", &man.fathername);
                printf("date = ");        scanf("%d", &man.date);
                printf("marks (separated by spaces) = ");
                scanf("%d %d %d", &man.marks[0], &man.marks[1], &man.marks[2]);
                printf("Average mark in school-leaving certificate = ");
                scanf("%f", &man.avermark);
                familyinserted = true;
            }
            else { man = mas[j]; j++; }
        }
        fwrite(&man, sizeof(enrollee), 1, f);
        if (ferror(f) != NULL) exit(5);
    }
    fclose(f);
 
    enrollee rmas[10];
    i = 0;
    while (!feof(f) && i < 5)
    {
        fread(&rmas[i], sizeof(enrollee), 1, f);
        i++;
    }
    fclose(f);
 
    for (int i = 0; i < 5; i++){
        printf("\nNew enrollee %d\n", i);
        printf("\nFamilyname = %s\n", rmas[i].familyname);
        printf("Name = %s\n", rmas[i].name);
        printf("Fathername = %s\n", rmas[i].fathername);
        printf("date = %d\n", rmas[i].date);
        printf("marks  = %d %d %d\n", rmas[i].marks[0], rmas[i].marks[1], rmas[i].marks[2]);
        printf("Average mark in school-leaving certificate = %f\n", rmas[i].avermark);
    }
    system("pause");
    return 0;
}
Добавлено через 36 минут
Всё вроде нашел. Глупая ошибка. Забыл в последний раз открыть файл перед чтением из него
 
Текущее время: 23:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru