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

Неправильно считывается массив из подструктуры - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Компьютерная графика http://www.cyberforum.ru/cpp-beginners/thread1188009.html
Есть две функцииvoid my_Line(int x1,int y1, int x2, int y2, int color)// Линия { int deltaX=abs(x2-x1); int deltaY=abs(y2-y1); int singX=1; if(x1>=x2) singX=-1; int singY=1; if(y1>=y2) singY=-1;
C++ Окончательное удаление файлов Иногда нужно удалить файлы безвозвратно. Например, Вы засняли хом-видео с подругой, а потом решили продать компьютер. Мне бы не хотелось, чтобы кто-то ЭТО увидел. Не хочу пользоваться чужим(не уверен, что там работает правильно), ну и самому было бы интересно написать подобное. Собственно вопрос. Если открыть файл fopen("1.avi","wb"); и в цикле записать в этот файл нули или rand(); то эти... http://www.cyberforum.ru/cpp-beginners/thread1187993.html
Ошибка сохранения/загрузки объекта с файла C++
Привет всем. Столкнулся с проблемой сохранения/загрузки объекта в/из файла. Вытащил из моего проекта куски кода, и создал новый проект, чтобы легче было показать где именно траблы. Итак, сейчас я расскажу как все у меня работает: У меня есть 3 абстрактных класса - Model,View,Controller. Model - это сущность данных, является субъектом. За любые изменения в Model следят...
Перегрузка операторов ( класс CMyString ) где-то ошибка C++
#include <iostream> #include <cstring> #include<conio.h> using namespace std; class CMyString {
C++ Сортировка на 3 лентах http://www.cyberforum.ru/cpp-beginners/thread1187978.html
Помогите понять алгоритм сортировки на 3 лентах (простым слиянием). Спасибо.
C++ Нужно написать кроссворд Нужно написать кроссворд .я так понимаю из 2 мерных символьных массивов один массив с готовыми словами в другой водит данные пользователь .пользователь водит данные по координатной сетке и цыкл проверяет правильность вода символов с годовым месивом. подробнее

Показать сообщение отдельно
Любовь777
0 / 0 / 0
Регистрация: 24.05.2014
Сообщений: 9
25.05.2014, 22:42     Неправильно считывается массив из подструктуры
Подскажите пожалуйста в чем ошибка считывания массива из файла ,а также имени.
может не правильно задала структуру?(файл с заданием прикрепила ниже)



Программа работает,но не может адекватно считать числа в массив(вместо подставленных чисел записывает в указанный файл огромные числа) ,а также вместо имени и группы выдает не те символы.


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
119
120
121
122
123
124
125
126
127
128
129
#include <stdio.h>
#include <string.h>
 
#include <limits.h>
#include <windows.h>
#include <locale>
 
#ifdef Q_OS_WIN32
const char* codecName = "IBM866";
#endif
 
 
 
 
 
#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 B[4];
    }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;
 
            {                                       /* замена '\n' на '\0'- меняем предпоследний символ */
 
            fgets(tek->Group, Lmax, f);
            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 vec");
            CLR;
 
            fscanf(f,"%d %d %d %d",&tek->uspevaemost.B[0],&tek->uspevaemost.B[1],&tek->uspevaemost.B[2],&tek->uspevaemost.B[3]);
 
            puts("File schitan ne vec2");
          
            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, "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);
}
 
 
 
using namespace std;
 
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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 06:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru