Форум программистов, компьютерный форум, киберфорум
Наши страницы

Создания однонаправленного списка и сохранения в типизированный файл. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Класс-Контейнер Вектор http://www.cyberforum.ru/cpp-beginners/thread269559.html
Подскажите пожалуйста, как заполнить вектор латинским алфавитом?
C++ Обработка нажатия клавиши без подтвержения enter Здравствуйте, уважаемые программисты. Подскажите в чем проблема. Вывожу рисунок посредством команды dos в языке turbo c. Необходимо зациклить вывод картинки до нажатия клаши esc. При нажатии стрелки... http://www.cyberforum.ru/cpp-beginners/thread269546.html
FirstBlood C++
Добрый вечер, форумчане. добрался до winapi :D . как говорится без практики ни куда. так вот. после внимательного прочтения, попробовал написать в VisuatStudio стандартную прогу helloworld. ...
C++ В чем ошибка
Странно выдает ошибку на это, ничего не понимаю, почему? char * text; *text = 'h'; *text = 'o'; *text = 'u'; *text = 's'; *text = 'e'; Выдает Необработанное исключение в "0x004013dc" в...
C++ помогите сделать!!!! http://www.cyberforum.ru/cpp-beginners/thread269527.html
Составить алгоритм решения задачи: сколько можно купить быков, коров и телят, платя за быка 10 р., за корову - 5 р., а за теленка - 0,5 р., если на 100 р. надо купить 100 голов скота? Нужно сделать...
C++ Посимвольная проверка строк без массива Всем доброго времени суток, собственно, сабж: Нужно проверить 2 строки посимвольно на наличие одинаковых элементов, но без использования массива. Я думаю, что есть стандарная функция C++. Если кто... подробнее

Показать сообщение отдельно
Vladimir.
157 / 157 / 10
Регистрация: 24.11.2009
Сообщений: 375
04.04.2011, 22:21
//в gsort - сортировка выбором с помощью вспомогательного массива.

чтение / запись и параметры командной строки:
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
int get_fname(char* fname1, char* fname2, char** argv){
//вытаскивает аргументы командной строки
 
    assert((fname1!=NULL) && (fname2!=NULL));
    assert((argv[1]!=NULL)&&(argv[2]!=NULL));
    
    strcpy (fname1,argv[1]);
    strcpy (fname2,argv[2]);
return 0;
}
int load_data(char* fname, my_linked_lists* list){
//считывает данные из фаила и помещает их в связный список.
    assert((list!=NULL) && (fname!=NULL));
    //связываем фаил с потоком:
    std::ifstream fin(fname);
    assert(fin != 0);
    
    //вытаскиваем содержимое фаила и записываем во временный объект:
    char fline[str_size];
    nodes tmp;
    while(fin.good()){ 
    //читаем построчно, записывая в соответсвующие поля tmp
    //здесь я предполагаю, что читается хорошо, и фаил составлен верно
    //так как проверки загромоздят код и снизят его читабельность.
    //должно быть что-то вроде
    //if(!fin.getline(fline,str_size)) <do something on error>..
    fin.getline(tmp.category,str_size);
    fin.getline(tmp.company,str_size);
    //ниже с приведением типа:
    fin.getline(fline,str_size);
    tmp.swept = atof(fline);
    fin.getline(fline,str_size);
    tmp.mileage = atof(fline);
    fin.getline(fline,str_size);
    tmp.price = atof(fline);
    
    //теперь добавим объект в наш список:
    list->add(&tmp);
    //закрываем поток:
    }
    fin.close();
    
    
return 0;
}
int save_data(char* fname, my_linked_lists* list){
//записывает данные связного списка в фаил.
    assert((list!=NULL) && (fname!=NULL));
 
    if (list->size() == 0) return 0; //список пуст.
 
    //связываем фаил с потоком:
    std::ofstream fout(fname);
    assert(fout != 0);  
    //пробегаем по нашему списку закидывая данные в поток:
    for(int i=1;i < list->size();i++){
        fout<<list->get_node(i)->category<<std::endl;
        fout<<list->get_node(i)->company<<std::endl;
        fout<<list->get_node(i)->swept<<std::endl;
        fout<<list->get_node(i)->mileage<<std::endl;
        fout<<list->get_node(i)->price<<std::endl;  
    }
    //последний узел придется закинуть "вручную"
    //дело в том, что продразумевается, что в конце фаила
    //нет пустой строки, т.е. после цены последнего
    //аввтомобиля не должно быть перевода каретки,
    //иначе result невозможно будет использовать в качестве
    //фаила данных
    //если будет желание - решается следующим образом: пишем циклом не в фаил, 
    //а в буфер, потом вытаскиваем последний символ (\n) и
    //отправляем буфер на запись.
    fout<<list->get_node(list->size())->category<<std::endl;
    fout<<list->get_node(list->size())->company<<std::endl;
    fout<<list->get_node(list->size())->swept<<std::endl;
    fout<<list->get_node(list->size())->mileage<<std::endl;
    fout<<list->get_node(list->size())->price;  
 
    fout.close();
    
return 0;
}


хидеры:
#include<assert.h>
#include<string.h>
#include<iostream>
#include<fstream>
#include<stdlib.h>

так же const int str_size =256; после хидеров, например пропишите.

зы: код проверен - работает.


data.txt 30(!) строк
  1. грузовик
  2. камаз
  3. 24.5
  4. 10234
  5. 60000
  6. легковой
  7. мерседес
  8. 4.5
  9. 65443
  10. 120000
  11. легковой
  12. лексус
  13. 5.6
  14. 143342
  15. 200000
  16. джип
  17. лендровер
  18. 7.4
  19. 34221
  20. 75000
  21. легковой
  22. майбах
  23. 4.6
  24. 23443
  25. 350000
  26. велосипед
  27. Витя-корпорейшн
  28. 0
  29. 123566
  30. 120
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru