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

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

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

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

29.12.2010, 21:30. Просмотров 15979. Ответов 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, 01:35 #61
Да? Тогда я жажду объяснений в чем тут проблема, кроме того что после push_back адреса становятся другие.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <vector>
#include <iostream>
 
template<class T>
T* returnAddr(T& one)
{
    return &one;
}
 
int main()
{
    std::vector<std::string> vec;
    vec.push_back(std::string("1"));
    vec.push_back(std::string("2"));
    std::cout<<returnAddr(vec[0])<<'\n';
    std::cout<<returnAddr(vec[1])<<'\n';
    vec.push_back(std::string("3"));
    std::cout<<returnAddr(vec[0])<<'\n';
    return 0;
}
Добавлено через 1 минуту
Да и без функции я жажду объяснения трудности взятия адреса...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <vector>
#include <iostream>
 
int main()
{
    std::vector<std::string> vec;
    vec.push_back(std::string("1"));
    vec.push_back(std::string("2"));
    std::cout<<&vec[0]<<'\n';
    std::cout<<&vec[1]<<'\n';
    vec.push_back(std::string("3"));
    std::cout<<&vec[0]<<'\n';
    return 0;
}
Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <vector>
#include <iostream>
 
int main()
{
    std::vector<std::string> vec;
    vec.push_back(std::string("1"));
    vec.push_back(std::string("2"));
    std::cout<<&vec[0]<<'\n';
    std::cout<<&vec[1]<<'\n';
    vec.push_back(std::string("3"));
    std::cout<<&vec[0]<<'\n';
    vec.push_back("10");
    std::cout<<&vec[0]<<'\n';
    std::cout<<"\n\n\n";
    for(size_t i=0; i<vec.size(); ++i)
        std::cout<<&vec[i]<<'\n';
    return 0;
}
kravam
быдлокодер
1694 / 881 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
14.01.2011, 01:39 #62
Как Вы не можете понять у вас "1" и "2" это константы, их адреса известны компилятору. Это и объясняет исполнимость кода.
А у меня есть строка p, которая появляется в памяти программы В ПРОЦЕССЕ ЕЁ ВЫПОЛНЕНИЯ. Прогамма считывает текстовый файл в строку (кстати, мой код: myklass>> stroka)

Потом пишется так:
C++
1
char* p= stroka.c_str();
После этого идёт обработка строки. (фактически обработка текстового файла) И в не
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.01.2011, 01:39 #63
В процессе выполнения.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <vector>
#include <iostream>
#include <string>
 
int main()
{
    std::vector<std::string> vec;
    char Arr[20];
    std::cin.getline(Arr, 19);
    vec.push_back(Arr);
    std::string str;
    std::getline(std::cin, str);
    vec.push_back(str);
    std::cout<<&vec[0]<<'\n';
    std::cout<<&vec[1]<<'\n';
    std::cout<<vec[0]<<'\n';
    std::cout<<vec[1]<<'\n';
    return 0;
}
kravam
быдлокодер
1694 / 881 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
14.01.2011, 01:40 #64
й толькО НА ЭТОЙ стадии становятся известны все адреса.
А в приведённых Вами примерах адреса "1" и "2" известны заранее, я повторяюсь уже. Чуть посложнее надо примеры брать.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.01.2011, 01:41 #65
kravam, Ну написал чуть посложнее. Я могу тонну примеров написать, во всех адреса легко берутся. По-моему я это уже продемонстрировал. Надо просто правильно работать с классом. Вам считывание из файла написать и показать что и тогда адреса легко берутся, или как?
kravam
быдлокодер
1694 / 881 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
14.01.2011, 01:41 #66
О! Уже лучше. А мне getline вобще претит. Я не знаю заранее размер буфера. Такие дела.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.01.2011, 01:43 #67
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <vector>
#include <iostream>
#include <string>
 
int main()
{
    std::vector<std::string> vec;
    std::string str;
    std::getline(std::cin, str);
    vec.push_back(str);
    char* ptr=const_cast<char*>(str.c_str());
    vec.push_back(ptr);
    std::cout<<&vec[0]<<'\n';
    std::cout<<&vec[1]<<'\n';
    std::cout<<vec[0]<<'\n';
    std::cout<<vec[1]<<'\n';
    return 0;
}
kravam
быдлокодер
1694 / 881 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
14.01.2011, 01:44 #68
И опять же в приведённом вами примере в вектор кладётся Arr. Да этот заполняется в ходе выполнения программыю Но его адрес известен заранее.
C++
1
char Arr[20];
silent_1991
14.01.2011, 01:45
  #69

Не по теме:

Балин, толстый тролль такой толстый...

ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.01.2011, 01:46 #70
kravam, Выше пример посмотрите) По-моему ничем не отличается от вашего. Кроме того что такой код.

C++
1
char* ptr=stroka.c_str();
не проходит компиляцию в MSVS, ибо константный char* пытаемся присвоить обычному. Нехорошо.
kravam
быдлокодер
1694 / 881 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
14.01.2011, 01:51 #71
И в последнем примере в вектор кладутся адреса, известные заранее. ДЕЙСТВИТЕЛЬНО:
C++
1
vec.push_back(str);
Так а у нас str уже объявлена
C++
1
vec.push_back(ptr);
Ну помня, как мы нашли ptr (через известную ЗАРАНЕЕ str)
В общем мне нечего сказать больше. ВСе всё видят.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.01.2011, 01:54 #72
kravam, Эм. А ваш код чем-то отличается? оО

C++
1
2
mystream >> stroka;
char* p=stroka.c_str();
Это что же, размер и адрес stroka не известен по-вашему? оО.
Через getline аналогично. Все происходит только в процессе выполнения программы и никак не на этапе компиляции.
Опять же отличие только в том, что использована неверная синтаксическая конструкция, это опасная и неверная конструкция я бы даже сказал.
kravam
быдлокодер
1694 / 881 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
14.01.2011, 01:57 #73
Предлагаю пока на этом остановиться. Дело в том, что я НЕ ХОЧУ использовать getline при считывании из файла. Не для того я столько времени пыхтел над кодингом чтобы вручную выделять память И не использую. А поэтому не изучил её параметров.
Вместо этого я написал свой класс, присоединяю его и пишу так:

C++
1
2
3
myfstream f ("file.txt");
string str;
f>> str;
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.01.2011, 01:58 #74
kravam, Да пожалуйста. Кто против? НО вы правда думаете, что после этого размер строки и ее адрес неизвестны компилятору????
П.С. для использования getline не нужно заранее выделять память=)
kravam
быдлокодер
1694 / 881 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
14.01.2011, 02:04 #75
Ну на счёт приведения типов сполрю не буду, я быдлокодер. А вот про p скажу- адрес строки на которую он указывает ЗАРАНЕЕ НЕИЗВЕСТЕН
C++
1
2
3
4
5
6
7
 myifstream myf ("log.txt");
 string stroka;
 myf>>stroka; 
 
 
 char* p;
 p= (char*)stroka.c_str();
И помня, что строка эта считывается из текстового файла, а он каждый раз вообще разный и строка эта обрабатывается и элементы vector<string> есть суть подстроки p- в общем их адреса и размеры заранее тоже неизвестны.

Добавлено через 2 минуты
А нет, тут я пожалуй соврал. Я не знаю реализации str.c_str() Но я могу ошибаться только в том, звестно ли заранее компилятору размер и адрес стрки, это да.

Но ещё раз: Строка разбивается на подстроки. И вот они-то точно неизвестны компилятору. А они и есть элементы vector<string>
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2011, 02:04
Привет! Вот еще темы с ответами:

Начинающий изучать 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, 02:04
Ответ Создать тему
Опции темы

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