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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 127, средняя оценка - 4.69
sly444
5 / 5 / 1
Регистрация: 29.12.2010
Сообщений: 146
#1

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

29.12.2010, 21:30. Просмотров 15989. Ответов 110
Метки нет (Все метки)

Я вот собираюсь начать учить язык си а впоследствии си++. У меня есть книга Б.Керниган, Д.Ритчи "Язык программирования си". Мне нравится как там написано, да и отзывы об этом учебнике неплохие. У меня проблема с компиляторами, я не могу понять какой лучше закачал наконец DEV-C++ вроде отличный интерфейс, русский. Дошло до написания первой программы, написал как в учебнике написано, первый пример. Должна была получится программа, которая писала бы - Здравствуй мир, но компилятор почему то комментарий Здравствуй мир выделил красным цветом, я этому значения не придал, скомпилировал программу, и нажал на запуск. При запуске появляется окно на долю секунды и исчезает. В учебнике написано, что у них примеры для UNIX системы, для других систем - надо консультироваться со специалистами. Подскажите пожалуйста как писать на виндовсе. Буду также рад любой информации по языку си, так как я только начинающий. Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2010, 21:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Начинающий си/си++ программист (C++):

Начинающий программист - C++
Всем привет, если у кого есть время, решите эту задачку, в программировании я на уровне "блондинки" (не знаю зачем полез в это дело), но...

Начинающий программист - C++
Здравствуйте уважаемые программисты.У меня к вам такой вопрос:C чего лучше надо начинать изучить С++?Какие книжки вы посоветуете?Как нужно...

Начинающий программист: с какой программы начать? - C++
Привет всем!Я только начал интересоваться программированием и не знаю с чего мне начать,посоветуйте пожалуйста с какой программы начать?(За...

Что должен знать начинающий программист? - C++
что нужно знать и уметь чтобы устроиться на работу программистом стажёром C++ ???

факториал числа. я начинающий - C++
Нужно создать функцию для вычисления факториала числа. Чтобы числа вводить с клавиатуры и предусмотреть возможность многократных расчетов с...

Начинающий: Запрос к Ms Access в VC++ - C++
Не понимаю, запрос на выборку получается, а на вставку - нет. ADODB::_ConnectionPtr cn=NULL; HRESULT hr=S_OK; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.01.2011, 02:04 #76
kravam, Вы крайне интересный человек. Расскажите мне разницу между вашим считыванием из файла и считыванием из потока? Там тоже размер строки всегда разный и неизвестен. А вот с хрена-ли адрес p вдруг становится неизвестным?)
Тааак... Ладно. Сейчас приведу пример. Не пишите пока)
kravam
быдлокодер
1694 / 881 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
14.01.2011, 02:10 #77
НА счёт getline- у меня учебник Павловской, так там три параметра нормально так расписаны. Второй- количество символов, сколько надо считать. А первый буфер. Значит, вручную следим за переполнением.

Добавлено через 1 минуту
Цитата Сообщение от ForEveR Посмотреть сообщение
А вот с хрена-ли адрес p вдруг становится неизвестным?)
я ошибся, я написал выше, p известен заранее.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.01.2011, 02:10 #78
Пример. И указатели. И вектор. И парсинг строки. И везде запросто берутся адреса.

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
#include <vector>
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    std::cout<<&str<<'\n';
    std::cout<<str<<'\n';
    char* p=const_cast<char*>(str.c_str());
    std::cout<<&p<<'\n';
    std::cout<<p<<'\n';
 
    std::vector<std::string> vec;
    std::string tmp;
    std::istringstream ist(str);
    while(ist >> tmp)
        vec.push_back(tmp);
    std::cout<<"\n\n\n";
    for(size_t i=0; i<vec.size(); ++i)
    {
        std::cout<<&vec[i]<<'\n';
        std::cout<<vec[i]<<'\n';
    }
    return 0;
}
П.С. у getline есть глобальная версия для класса string, которую я в основном и использую. И в этом коде тоже
kravam
быдлокодер
1694 / 881 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
14.01.2011, 02:17 #79
НЕ пойдёт и вот почему, но сперва вопрос:
Я если правильно понял, ваш код считывает строку а потом её разбивает на подстроки, где разделители - пробельные символы и каждую из таких подстрок запихивает в vector<string>, так?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.01.2011, 02:19 #80
kravam, Так. Можно поставить любой разделитель. Вообщем можно как захочется распарсить строку - запихнуть в вектор и каждый адрес строки просто или как элемента вектора - будет запросто браться.
kravam
быдлокодер
1694 / 881 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
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
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.01.2011, 02:30 #82
kravam, Парсинг мне сейчас впадлу делать. Завтра экзамен. Разделители 0XD это что значит?
Все строки из этого файла считать в одну? Я правильно понял? Или же построчно?
kravam
быдлокодер
1694 / 881 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
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
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
быдлокодер
1694 / 881 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
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
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.01.2011, 03:04 #87
kravam, Учебники Павловской вообще не советуют... Но вцелом может быть getline в этой ипостасии будет описана при описании класса string. А тот ресурс на который вы привели ссылку очень хорош. Как справочник - лучше вряд ли найдется.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
14.01.2011, 03:07 #88
Цитата Сообщение от kravam Посмотреть сообщение
Ну дальше я повторяюсь уже. После нескольких push_back адрес какого-либо элемента v взять проблематично довольно.
Есть такое понятие в ООП, одно из основных, инкапсуляция называется. Почитайте на досуге и не лазайте больше потными указателями в поля данных объекта. Черт его знает, как оно там реализовано.
kravam
быдлокодер
1694 / 881 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
14.01.2011, 03:14 #89
А мне просто подсказать некому, там два варианта getline (а их может и больше, кто его знает), вот второй
http://www.cplusplus.com/reference/i...tream/getline/

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

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

Вообще, в плюсах есть такая шикарная вещь, как ссылка, что сильно упрощает передачу параметров сложного типа. Креститься пяткой, теперь не нужно постоянно явно использовать указатели.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2011, 03:21
Привет! Вот еще темы с ответами:

Начинающий изучать C++ (подскажите литературу) - C++
Здравствуйте всем, я хочу начать изучать C++, мне нужно чтоб мне посоветовали какие книжки почитать, для изучения синтаксиса языка C++ да и...

Как сравнить числа.(начинающий) - C++
Как сравнить числа например: если введённое число больше 40 cout &lt;&lt;&quot;неправильный ввод&quot;&lt;&lt;endl; а если ведённое число меньше 40 сделать...

Начинающий, посоветуйте, с чего начать? - C++
Здравствуйте, давно хотел заняться программированием, и сейчас, со всей серьезностью решил изучать. Помогите решить непростой для меня...

C++, <fstream>, начинающий, ошибка на выполнении - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; class Write { public: char s, *name, way; short int N; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.01.2011, 03:21
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru