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

Массив структур - C++

Восстановить пароль Регистрация
 
viktorrrr
42 / 42 / 1
Регистрация: 11.02.2010
Сообщений: 358
17.07.2011, 20:59     Массив структур #1
Эксперементирую тут с файлами. Что-то полная ерунда получается. ВОт я объявил массив структур, а при заполнении ерунда какая-то получается. Результатом записывается адрес в памяти как я понял и , после выхода из заполнения файла начинается рекурсивный бесконечный вызов инструкции cout<<"Нажмите один, чтобы начать заполнять список"<<endl; Подскажите, пожалуйста, ошибку. Да плюс, конечно, хотелось бы произвольно заполнять массив структур а не подряд

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
#include<iostream>
#include<fstream>
 
using namespace std;
void Record();
const int i=100;
struct Bibliotek{
    char Name[30];
    char Family[30];
    char Name_of_book[50];
};
Bibliotek Size[i];
void Record(){
 
 
    ofstream File("bibl.dat");
    if(!File){
        cerr<<"Problemi s failom";
        exit(1);
    }
    int a;
    cout<<"Введите слов"<<endl;
    for(a=0;a<i;a++){
    cin>>Size[a].Name;
    
    }
    File<<Size;
    File.close();
}
 
 
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int vibor;
    do{
        cout<<"Нажмите один, чтобы начать заполнять список"<<endl;
        cin>>vibor;
        switch(vibor){
        case 1:
    Record();
    break;
    
        }
    }while(vibor!=0);
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2011, 20:59     Массив структур
Посмотрите здесь:

C++ Массив структур
Массив структур C++
Массив структур C++
Массив структур C++
Массив структур C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
17.07.2011, 21:33     Массив структур #2
произвольно - это как? Имеете ввиду, что вводить не именно n штук записей, а пока сами не захотите закончить? Если да, то можно использовать некий "флаг окончания ввода"...
C++
1
2
3
4
5
do
    //...
    std::cout << "Message... ( y or n ) ";
    std::cin >> flag;
while ( flag != 'n' );
grizlik78
17.07.2011, 21:46
  #3

Не по теме:

Цитата Сообщение от viktorrrr Посмотреть сообщение
C++
1
const int i=100;
Ой какой неудачный выбор имени константы для обозначения размера массива...

viktorrrr
42 / 42 / 1
Регистрация: 11.02.2010
Сообщений: 358
17.07.2011, 21:48  [ТС]     Массив структур #4
Поняли правильно и при этом мочь проверять на пустоту . Не понял, как использовать флаг окончания ввода. Я же ввожу любые символы, как при этом выскочить из цикла-то? Как-то, наверно, по-другому надо заставить реагировать программу?
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
17.07.2011, 21:51     Массив структур #5
viktorrrr, а вот здесь - фигня:
C++
1
2
for(a=0;a<i;a++){
        cin>>Size[a].Name;
i = 100, а размер Name - только 30.
Кроме того, тут до ближайшего пробела будет вводить.
Кроме того, имя i - очень неудачное.
Кроме того, глобальную константу не сразу в проге видать...
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
17.07.2011, 23:00     Массив структур #6
Автор, я видел быдлкодеров, сам былокодер, но такого...

Короче, ты просишь чтобы можно было ввродить нужное количество структур и тут же устанавливаешь его минимум 100. ТЕбе самому не смешно? Если i это максимум, то вводи минимум дополнительно, вот так:

C++
1
2
3
4
5
        cout<<"Введи количество записей и слова"<<endl;
        int temp;
        cin>> temp;
        //очистим буфер
        fflush (stdin);
Дальше, давай сразу: если буфер массив char, используешь gets

C++
1
         gets (Size[a].Name);
Так, а в файл хорошо перегонять строки, то есть каждое имя дОлжно преобразовать в строку

C++
1
         File<<string (Size[a].Name)<< " Фамилии нет названия книги тоже нет"<< endl;
Теперь, а что ты только имя вводишь? Без фамилии иназвания книги? Ну у нас демократия.

Далее: чё ты не позаботился об окончании этой всей бодяги? Пишем так:

C++
1
                cout<<"Нажмите один, чтобы начать заполнять список или ноль чтобы прекратить этцу бодягу к чертям"<<endl;
И. кстати, если ты второй раз вздумаешь нажать на 1, то то, что ты записал в файл вначале, затрётся к матери. Поэтому окрытие и закрытие файла вынеси в основную функцию. Короче с учётом всех замечаний и местных условий:


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
#include <windows.h>
#include<iostream>
#include<fstream>
 
using namespace std;
void Record();
const int i=100;
struct Bibliotek{
        char Name[30];
        char Family[30];
        char Name_of_book[50];
};
Bibliotek Size[i];
void Record(){
 
 
        ofstream File("bibl.txt");
        if(!File){
                cerr<<"Problemi s failom";
                exit(1);
        }
        int a;
        cout<<"Введи количество записей и слова"<<endl;
        int temp;
        cin>> temp;
        //очистим буфер
        fflush (stdin);
 
           
        for(a=0;a<temp;a++){
         gets (Size[a].Name);
         File<<string (Size[a].Name)<< " Фамилии нет названия книги тоже нет"<< endl;
        }
 
        File.close();
}
 
 
 
int main()
{
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
        setlocale(LC_ALL,"Russian");
        int vibor;
        do{
                cout<<"Нажмите один, чтобы начать заполнять список или ноль чтобы прекратить этцу бодягу к чертям"<<endl;
                cin>>vibor;
                switch(vibor){
                case 1:
        Record();
        break;
        
                }
        }while(vibor!=0);
        return 0;
}
Плюс тебе, что вроде сам писал.

Добавлено через 1 минуту
Ещё: придётся тебе, друже, отслеживать вручную длину имени и всех вводимых величин если надумаешь их вводить. Иначе кранты.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2011, 23:13     Массив структур
Еще ссылки по теме:

C++ Массив структур
Ввести массив структур; рассортировать массив в алфавитном порядке C++
Массив структур C++

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

Или воспользуйтесь поиском по форуму:
viktorrrr
42 / 42 / 1
Регистрация: 11.02.2010
Сообщений: 358
17.07.2011, 23:13  [ТС]     Массив структур #7
Каюсь! Стыдно!! ))
Но я мало еще понимаю что.
Yandex
Объявления
17.07.2011, 23:13     Массив структур
Ответ Создать тему
Опции темы

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