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

Начинающий си/си++ программист - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 127, средняя оценка - 4.69
sly444
 Аватар для sly444
5 / 5 / 1
Регистрация: 29.12.2010
Сообщений: 134
29.12.2010, 21:30     Начинающий си/си++ программист #1
Я вот собираюсь начать учить язык си а впоследствии си++. У меня есть книга Б.Керниган, Д.Ритчи "Язык программирования си". Мне нравится как там написано, да и отзывы об этом учебнике неплохие. У меня проблема с компиляторами, я не могу понять какой лучше закачал наконец DEV-C++ вроде отличный интерфейс, русский. Дошло до написания первой программы, написал как в учебнике написано, первый пример. Должна была получится программа, которая писала бы - Здравствуй мир, но компилятор почему то комментарий Здравствуй мир выделил красным цветом, я этому значения не придал, скомпилировал программу, и нажал на запуск. При запуске появляется окно на долю секунды и исчезает. В учебнике написано, что у них примеры для UNIX системы, для других систем - надо консультироваться со специалистами. Подскажите пожалуйста как писать на виндовсе. Буду также рад любой информации по языку си, так как я только начинающий. Заранее спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,268
14.01.2011, 02:27     Начинающий си/си++ программист #81
Очень, очень интересно. У меня текстовый файл такого примерно вида:
C++
1
2
3
4
5
stroka
stroka 1
stroka 2
stroka 3 4 aaa
 stroka 3 4 bbbb
Вот мне его надо считать в строку, не выделяя под неё размер и разбить эту строку на подстроки, где разделители 0XD, а потом каждую подстроку запихать в вектор <string>
А самое главное- самое главное- необходимо корректно брать потом адреса элементов этого массива.

Я это всё решил уже. А адреса не брал, а обращался к элементам через индексы, что наверное, пограмотнее. Но с адресами тоже хотелось бы поработать.

Но если напишите- буду благодарен, потом изучу.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
14.01.2011, 02:30     Начинающий си/си++ программист #82
kravam, Парсинг мне сейчас впадлу делать. Завтра экзамен. Разделители 0XD это что значит?
Все строки из этого файла считать в одну? Я правильно понял? Или же построчно?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,268
14.01.2011, 02:42     Начинающий си/си++ программист #83
Ну может я поставил условие подразумевая, что по-другому не решить его. Может задача проще решается, не знаю.

А ВООБЩЕ надо сформировать vector<string>, каждый элемент которого суть одна из строк
C++
1
2
3
4
5
stroka
stroka 1
stroka 2
stroka 3 4 aaa
 stroka 3 4 bbbb
Ну то есть из файла их как-то считывать по одной ли скопом ли неважно. А вот что важно:

1)НИ ОДИН РАЗ не надо ни под что выделять память вручную
2) После этого хотелось бы увидеть их адреса вот так: &v[0]

0XD это символ котрым эти строки разбиены в файле, между ними 0XD (возврат каретки) и 0XA (перевод на другую строку)

То есть любой из этих симвлов может быть разделителем, лучше 0XD, поскольку они идут в такой последовательности:
0XD 0XA

Ну впадлу так впадлу. А вообще это могло бы меня убедить. Ну может я сам дойду до этих всех параметров потом.

Добавлено через 5 минут
строки конечно разными всякими могут быть, важно что в них могут быть пробелы.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
14.01.2011, 02:48     Начинающий си/си++ программист #84
Хах. Даже так. Тут даже парсинг не нужен.

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
#include <vector>
#include <iostream>
#include <string>
#include <fstream>
 
std::vector<std::string> readFile(std::ifstream& ifs)
{
    std::string str;
    std::vector<std::string> vec;
    while(std::getline(ifs, str))
        vec.push_back(str);
    return vec;
}
 
int main()
{
    std::string str;
    std::cout<<"Enter name of file\n";
    std::cin>>str;
    std::ifstream ifs(str.c_str());
    if(!ifs)
    {
        std::cerr<<"Error with open file "<< str <<'\n';
        return 1;
    }
    std::vector<std::string> vec=readFile(ifs);
    for(size_t i=0; i<vec.size(); ++i)
    {
        std::cout<<&vec[i]<<'\n';
        std::cout<<vec[i]<<'\n';
    }
    return 0;
}
Работает верно?)
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,268
14.01.2011, 03:03     Начинающий си/си++ программист #85
Да вроде работает, спасибо. Получается, я зря корпел писал свой класс для считывания в строку, а это можно было реализовать с помощью getline. Знай я это, может тоже придумал бы такое красивое решение. Обидно. Ну я потом конечно подробнее изучу.

Так как ж всё таки быть с синтаксисом getline?
Брать отсюда?
http://www.cplusplus.com/reference/string/getline/
И в печку мой учебник?
silent_1991
14.01.2011, 03:04
  #86

Не по теме:

kravam, видимо не зря все отговаривают читать Павловскую...

ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
14.01.2011, 03:04     Начинающий си/си++ программист #87
kravam, Учебники Павловской вообще не советуют... Но вцелом может быть getline в этой ипостасии будет описана при описании класса string. А тот ресурс на который вы привели ссылку очень хорош. Как справочник - лучше вряд ли найдется.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
14.01.2011, 03:07     Начинающий си/си++ программист #88
Цитата Сообщение от kravam Посмотреть сообщение
Ну дальше я повторяюсь уже. После нескольких push_back адрес какого-либо элемента v взять проблематично довольно.
Есть такое понятие в ООП, одно из основных, инкапсуляция называется. Почитайте на досуге и не лазайте больше потными указателями в поля данных объекта. Черт его знает, как оно там реализовано.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,268
14.01.2011, 03:14     Начинающий си/си++ программист #89
А мне просто подсказать некому, там два варианта getline (а их может и больше, кто его знает), вот второй
http://www.cplusplus.com/reference/i...tream/getline/

Так что тут Павловская не ошиблась, я просто не доглядел. Всем спасибо.

Добавлено через 6 минут
Цитата Сообщение от lemegeton Посмотреть сообщение
Есть такое понятие в ООП, одно из основных, инкапсуляция называется. Почитайте на досуге и не лазайте больше потными указателями в поля данных объекта. Черт его знает, как оно там реализовано.
хе, так если надо адрес взять. Чё делать-то? Ну я уже говорил, я бы посмотрел адрес, а потом если он бы вывелся удостоврился в OllyDbg, что там именно то, что я и предполагаю, я такие вещи проверяю. Хорошо, если знаешь итераторы. А если не знаешь? Вот пример живой: вот я знаю getline, а их , оказывается две.
А итераторов не понять сколько. Вот я щас читаю аммераалля, там и входные и выходные и всякие. Оно и хорошо и плохо- теряешься. А взятие адреса в стиле С всегда однозначно &...
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
14.01.2011, 03:21     Начинающий си/си++ программист #90
Цитата Сообщение от kravam Посмотреть сообщение
хе, так если надо адрес взять. Чё делать-то?
Для дебага берите, сколько влезет. Если не секрет, зачем вы проверяете, что по адресу переменной лежит её значение? В каких случаях это может быть не так?

Вообще, в плюсах есть такая шикарная вещь, как ссылка, что сильно упрощает передачу параметров сложного типа. Креститься пяткой, теперь не нужно постоянно явно использовать указатели.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,268
14.01.2011, 03:30     Начинающий си/си++ программист #91
Я не могу объяснить, это каждый отдельный случай надо брать. В 99 % смотрятся адреса элементов динамических массивов, конечно, а не отдельных переменных

Кстати, именно так я познакомился с прописыванием памяти. Эту ошибку ИНАЧЕ не обнаружить (разве что найти её в исходнике, но моей головы не хватило). А хватило бы- так я бы вообще без ошибок кодил.
Flynn84
0 / 0 / 0
Регистрация: 13.01.2011
Сообщений: 7
14.01.2011, 10:40     Начинающий си/си++ программист #92
Ну в общем, поменял решение ). Буду изучать Си ++. Какой учебник лучше взять для новичка? Страуструп подойдет?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
14.01.2011, 11:11     Начинающий си/си++ программист #93
Flynn84, ни в коем случае! По крайней мере не "учебник" под названием "Язык программирования Си++". Говорят, его последняя книга (Программирование. Принципы и практика использования Си++) хороша, но в электронном виде я её пока не видел. От себя могу порекомендовать Дейтелов - Как программировать на Си++ (пятое или шестое издания).
Flynn84
0 / 0 / 0
Регистрация: 13.01.2011
Сообщений: 7
14.01.2011, 12:13     Начинающий си/си++ программист #94
Цитата Сообщение от silent_1991 Посмотреть сообщение
Flynn84, ни в коем случае! По крайней мере не "учебник" под названием "Язык программирования Си++".
А что так? Книга не очень или не для новичков?

Видел вчера несколько тем про учебники по плюсам, надо их изучить внимательней.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
14.01.2011, 12:36     Начинающий си/си++ программист #95
Flynn84, и стиль ужасный (это, разумеется, моё личное мнение), и совсем не для новичков, да и систематики в подаче материала никакой.

Добавлено через 3 минуты

Не по теме:

А вообще, я привередливый, вы меня меньше слушайте))) Например, в тех темах направо и налево советуют Либерти - "Освой самостоятельно Си++ за 21 день", абсолютное большинство от неё в восторге, а мне она, например, абсолютно не понравилась. Слишком уж там искусственные примеры даются для понимания принципов ООП. Вернее, они сами, может, и живые, но практической пользы в написании реальных программ не дают никакой. Опять же, строгое ИМХО.

taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.01.2011, 12:40     Начинающий си/си++ программист #96
Цитата Сообщение от lemegeton Посмотреть сообщение
В каких случаях это может быть не так?
Если я напишу компил и среду разработки.
DarK_Fifti'S
 Аватар для DarK_Fifti'S
2 / 2 / 0
Регистрация: 16.01.2011
Сообщений: 23
16.01.2011, 14:03     Начинающий си/си++ программист #97
Цитата Сообщение от Flynn84 Посмотреть сообщение
Ну в общем, поменял решение ). Буду изучать Си ++. Какой учебник лучше взять для новичка? Страуструп подойдет?
Мне понравилась книжка товарища Семенидо Дмитрия
Rusl_v
 Аватар для Rusl_v
13 / 12 / 1
Регистрация: 22.12.2010
Сообщений: 67
16.01.2011, 19:10     Начинающий си/си++ программист #98
Страуструп сложный,согласен.Я тоже новичок,мне понравился Шильдт
Flynn84
0 / 0 / 0
Регистрация: 13.01.2011
Сообщений: 7
17.01.2011, 17:22     Начинающий си/си++ программист #99
Цитата Сообщение от Rusl_v Посмотреть сообщение
Страуструп сложный,согласен.Я тоже новичок,мне понравился Шильдт
"Полный справочник по С++" ? Или у него еще что-то есть?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2011, 18:33     Начинающий си/си++ программист
Еще ссылки по теме:

C++, <fstream>, начинающий, ошибка на выполнении C++
Начинающий программист C++
Начинающий, посоветуйте, с чего начать? C++

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

Или воспользуйтесь поиском по форуму:
Kastaneda
17.01.2011, 18:33     Начинающий си/си++ программист
  #100

Не по теме:

Flynn84, Шилдт вообще парень плодовитый) У него много книг, и не только по С/С++.

Yandex
Объявления
17.01.2011, 18:33     Начинающий си/си++ программист
Ответ Создать тему
Опции темы

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