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

Объявить массив целых чисел в подструктуре - C++

Восстановить пароль Регистрация
 
Любовь777
0 / 0 / 0
Регистрация: 24.05.2014
Сообщений: 9
24.05.2014, 20:56     Объявить массив целых чисел в подструктуре #1
Подскажите пожалуйста как правильно мне следует объявить массив B в подструктуре,что бы он считывался из файла.
Ниже привела текст проги,она работает,но не считывает массив B(


C++ (Qt)
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
#include <stdio.h>
#include <string.h>
#define Lmax 20
#define CLR while(fgetc(f)!='\n')
 
struct Student
{
 
    char Group[Lmax];
    struct
    {
        char Famil[Lmax], Name[Lmax], Otch[Lmax];
                                                        //s_name - surname
    }FIO; //manufacturer - производитель
    struct
    {
        int srball;
        int B[10];
    }uspevaemost;
 
    Student *next; //поле указателя на следующую запись
};
//формирование стека стульев. На входе - имя входного файла
 
Student* stack(char _name[])
{
    Student *tek, *stack=NULL; //изначально список пуст
    FILE *f;
    if (!(f=fopen(_name, "r")))
    puts("File not found");
    else
    {
        while(!feof(f))
        { //выделение памяти для новой записи
        tek = new Student;
        if (fgets(tek->Group, Lmax, f))
            {                                       /* замена '\n' на '\0'- меняем предпоследний символ */
            tek->Group[strlen(tek->Group)-1]='\0';
 
            fgets(tek->FIO.Famil, Lmax, f);
            tek->FIO.Famil[strlen(tek->FIO.Famil)-1]='\0';
 
            fgets(tek->FIO.Name, Lmax, f);
            tek->FIO.Name[strlen(tek->FIO.Name)-1]='\0';
 
            fgets(tek->FIO.Otch, Lmax, f);
            tek->FIO.Otch[strlen(tek->FIO.Otch)-1]='\0';
            puts("File schitan ne ves");
 
            fscanf(f,"%d", &tek->uspevaemost.srball);
            fscanf(f,"%d", &tek->uspevaemost.B[0]);
            fscanf(f,"%d", &tek->uspevaemost.B[1]);
            fscanf(f,"%d", &tek->uspevaemost.B[2]);
            fscanf(f,"%d", &tek->uspevaemost.B[3]);
            CLR;
 
            tek->next=stack;
            stack=tek;
            }
        }
delete tek;
}
     puts("File schitan");
return(stack); //возвращается указатель на вершину стека
}
 
 
 
void vivod(Student* stack, char name[]) //вывод списка в файл
{FILE *f2=fopen(name, "w");
if (!stack)
{
fprintf(f2," list after elements removing is empty\n");
}
else
{
fprintf(f2, " list after elements removing\n");
//вывод списка в файл
while(stack!=NULL)
{
fprintf(f2, "Group:%s\n", stack->Group);
fprintf(f2, "Familia:%s\n", stack->FIO.Famil);
fprintf(f2, "Name:%s\n", stack->FIO.Name);
fprintf(f2, "Otchestvo:%s\n", stack->FIO.Otch);
fprintf(f2, "SrBall:%d\n",stack->uspevaemost.srball );
fprintf(f2, "B1:%d\n",stack->uspevaemost.B[0] );
fprintf(f2, "B2:%d\n",stack->uspevaemost.B[1] );
fprintf(f2, "B3:%d\n",stack->uspevaemost.B[2] );
fprintf(f2, "B4:%d\n",stack->uspevaemost.B[3] );
stack=stack->next; //движение по списку
}
}
puts("File sohranen");
fclose(f2);
}
 
 
 
 
 
int main()
{
Student *first; //указатель на вершину стека
char name1[Lmax], name2[Lmax]; /* имена входного и
выходного файла */
printf("Input file name: ");
gets(name1);
printf("Output file name: ");
gets(name2);
first=stack(name1); //формирование стека
if (first!=NULL)
{
 
vivod(first, name2); //вывод результата в файл
printf("Results saved in file %s\n", name2);
}
return 0;
}
Миниатюры
Объявить массив целых чисел в подструктуре  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2014, 20:56     Объявить массив целых чисел в подструктуре
Посмотрите здесь:

C++ Сформировать одномерный массив целых чисел, используя датчик случайных чисел.
C++ Объявить массив целых чисел и заполнить его случайными значениями.
C++ Объявить одномерный и двумерный динамические массивы целых чисел. Написать процедуры для заполнения их случайными значениями
C++ Объявить массив целых чисел и заполнить его случайными значениями
C++ Объявить массив? Запросто! Объявить массив массивов? А как это?
C++ Сформировать одномерный массив целых чисел, используя датчик случайных чисел
Задан массив K(m) попарно различных целых чисел. Получить все перестановки целых чисел C++
Переделать массив целых чисел на массив вещественных чисел C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4303 / 3724 / 1255
Регистрация: 14.04.2014
Сообщений: 14,586
24.05.2014, 22:15     Объявить массив целых чисел в подструктуре #2
В задании же сказано, что средний балл не записан в файл, зачем ты его считываешь? И почему в массиве 10 элементов, в задании же 5?
Массив одной строкой считывай
C++
1
fscanf(f,"%d%d%d%d%d", ...);
Любовь777
0 / 0 / 0
Регистрация: 24.05.2014
Сообщений: 9
24.05.2014, 22:26  [ТС]     Объявить массив целых чисел в подструктуре #3
Спасибо огромное,
не внимательно прочла задание.
Я на всякий размер массива побольше сделала,не понимая причину ошибки )

Добавлено через 7 минут
После исправления считывания
C++ (Qt)
1
2
3
            fscanf(f,"%d%d%d%d%d",&tek->uspevaemost.B[0],&tek->uspevaemost.B[1],&tek->uspevaemost.B[2],&tek->uspevaemost.B[3]);
            fscanf(f,"%d", &tek->uspevaemost.srball);
            CLR;
все равно не считывает дальше и не закрывает файл
Yandex
Объявления
24.05.2014, 22:26     Объявить массив целых чисел в подструктуре
Ответ Создать тему
Опции темы

Текущее время: 18:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru