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

решил изучить с++ - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 149, средняя оценка - 4.92
Olejeg85
13 / 10 / 0
Регистрация: 27.03.2011
Сообщений: 164
27.03.2011, 17:19     решил изучить с++ #1
всем привет, решил начать изучать с++, скачал MSVC++ 2010 express, какую литературу вы посоветуете для изучения данного языка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
13.05.2011, 20:09     решил изучить с++ #161
stdcout, http://progs.biz/cpp/cpp/lessons/033.aspx
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stdcout
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
14.05.2011, 01:25     решил изучить с++ #162
Извиняюсь за то, что пишу сюда снова.
Ввожу текст в окно редактирования, ввожу имя файла в предназначенное для этого кнопку,
нажимаю кнопку "Сохранить".
В отдельных случаях сохраняет, в других вылетает непонятная ошибка. Это вроде как-то связано с размером введённого текста, хотя не уверен.

ОС Windows инициировала точку останова в wp10may.exe.

Это может быть вызвано повреждением кучи и указывает на ошибку в wp10may.exe или в одной из загруженных им DLL.

Возможной причиной так же может быть нажатие пользователем клавиши F12, когда фокус принадлежит wp10may.exe

Выведенное на экран окно содержит дополнительные данные для диагностики ошибки
Вот фрагмент:
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
if (!(iTemp = SendMessage(hwndFilename, EM_GETLINE, 0, (LPARAM) szFileName)))
                    MessageBox(hwnd, "Введите имя файла!", szAppName, MB_OK);
            else
            {
                if (IDYES == MessageBox(hwnd,
                        "Вы точно хотите сохранить файл под таким именем?",
                                szAppName, MB_YESNO))
                {
                    szFileName[iTemp] = '\0';
                    strcpy(szTemp, szAppName);
                    strcat(szTemp, "       Сохранение...");
                    SetWindowText(hwnd, szTemp);
                    SetCursor(LoadCursor(NULL, IDC_WAIT));
                    
                    file = fopen(szFileName, "w");
 
                    iLines = SendMessage(hwndEditor, EM_GETLINECOUNT, 0, 0);
                    iMaxLength = 0;
                                        /* Определяем максимальную длину
                                            строки в окне редактирования.    */
                    for (i = 0; i < iLines; ++i)
                    {
                        iTemp = SendMessage(hwndEditor, EM_LINELENGTH, i, 0);
                        if (iTemp > iMaxLength)
                            iMaxLength = iTemp;
                    }
                    szPerLine   = (char *) malloc(iMaxLength + 2);
                                        /* Записываем в файл все строки поочерёдно. */
                    for (i = 0; i < iLines; ++i)
                    {
                        iTemp = SendMessage(hwndEditor, EM_GETLINE, i, (LPARAM) szPerLine);
                                                /* На случай, если в конец строки
                                                    szPerLine не добавляется завершающий ноль,
                                                    думал, что проблема в этом. */
                        szPerLine[iTemp] = '\0'; 
                        fprintf(file, "%s", szPerLine);
                    }
                    free(szPerLine);
 
                    fclose(file);
 
                    SetWindowText(hwnd, szAppName);
                    SetCursor(LoadCursor(NULL, IDC_ARROW));
                }
            }
Добавлено через 3 минуты
Это всё в Visual Studio.
И после появления сообщения об ошибке, открывается файл dbgheap.c, и указывается последняя строчка в данной функции из того файла.
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
/***
*int _CrtIsValidHeapPointer() - verify pointer is from 'local' heap
*
*Purpose:
*       Verify pointer is not only a valid pointer but also that it is from
*       the 'local' heap. Pointers from another copy of the C runtime (even in the
*       same process) will be caught.
*
*Entry:
*       const void * pUserData     - pointer of interest
*
*Return:
*       TRUE - if valid and from local heap
*       FALSE otherwise
*
*******************************************************************************/
extern "C" _CRTIMP int __cdecl _CrtIsValidHeapPointer(
        const void * pUserData
        )
{
        if (!pUserData)
            return FALSE;
 
        if (!_CrtIsValidPointer(pHdr(pUserData), sizeof(_CrtMemBlockHeader), FALSE))
            return FALSE;
        /* Вот она. */
        return HeapValidate( _crtheap, 0, pHdr(pUserData) );
}
stdcout
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
05.06.2011, 13:51     решил изучить с++ #163
У меня снова вопрос.
Как я слышал, среди стандартных функций нет функции наподобие getch() из conio.h. Но можно написать system("pause"). Хотелось бы узнать, как эта функция работает в Windows. Должна же быть среди API функций ф-ия подобная getch(), которая ожидает нажатия клавиши и возвращает её код.
И ещё. В Visual Studio 2010 Express если в подключённом к проекту хедере не добавить пустую строчку в конец, то при компиляции (или как это называется) выдаётся ошибка о том, что обнаружен непредвиденный конец файла в этом хедере. Если каретку перевести в конец файла и нажать ENTER, то компилируется нормально. Для чего это сделано, или это неполадка в самой студии (или что-то в этом роде)?
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
05.06.2011, 13:56     решил изучить с++ #164
stdcout, новый вопрос - новая тема.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.06.2011, 14:10     решил изучить с++ #165
Цитата Сообщение от stdcout Посмотреть сообщение
У меня снова вопрос.
Как я слышал, среди стандартных функций нет функции наподобие getch() из conio.h. Но можно написать system("pause"). Хотелось бы узнать, как эта функция работает в Windows. Должна же быть среди API функций ф-ия подобная getch(), которая ожидает нажатия клавиши и возвращает её код.
И ещё. В Visual Studio 2010 Express если в подключённом к проекту хедере не добавить пустую строчку в конец, то при компиляции (или как это называется) выдаётся ошибка о том, что обнаружен непредвиденный конец файла в этом хедере. Если каретку перевести в конец файла и нажать ENTER, то компилируется нормально. Для чего это сделано, или это неполадка в самой студии (или что-то в этом роде)?
Открой cmd и вбей туда pause
Обязательно API? Есть std::cin.get(), к примеру.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
05.06.2011, 16:47     решил изучить с++ #166
Цитата Сообщение от stdcout Посмотреть сообщение
если в подключённом к проекту хедере не добавить пустую строчку в конец...
Вообще-то, так должно быть во всех компиляторах, соответствующих стандарту.) Совершенно непонятное мне требование, поэтому оно игнорируется многими компиляторами.
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
05.06.2011, 19:01     решил изучить с++ #167
Цитата Сообщение от Deviaphan Посмотреть сообщение
Вообще-то, так должно быть во всех компиляторах, соответствующих стандарту.) Совершенно непонятное мне требование, поэтому оно игнорируется многими компиляторами.
А где в стандарте подобное требование написано?
В Билдере иногда проскакивает как раз такая ошибка - типа обнаружен конец файла, причем именно в системном хедере.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
05.06.2011, 19:11     решил изучить с++ #168
Не помню где, но точно помню, что есть такое. Настолько удивлён был, что до сих пор помню.)
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
05.06.2011, 19:23     решил изучить с++ #169
Цитата Сообщение от Deviaphan Посмотреть сообщение
Не помню где, но точно помню, что есть такое. Настолько удивлён был, что до сих пор помню.)
Ок, пороюсь. Спасибо.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
05.06.2011, 19:27     решил изучить с++ #170
Ну вот, например, C++ Standard ANSI ISO/IEC 14882:2003
Раздел 2 Lexical conventions
Параграф 2.1 Phases of translation
Пункт 2
Each instance of a new-line character and an immediately preceding backslash character is deleted,
splicing physical source lines to form logical source lines. If, as a result, a character sequence that
matches the syntax of a universal-character-name is produced, the behavior is undefined. If a source
file that is not empty does not end in a new-line character, or ends in a new-line character immediately
preceded by a backslash character, the behavior is undefined.
stdcout
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
05.06.2011, 22:36     решил изучить с++ #171
diagon, да API, потому что на C нужно, а не C++.
stdcout
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
07.06.2011, 17:45     решил изучить с++ #172
Никто не знает, примерно как можно реализовать функцию getch()? Ведь реализована же она как-то в conio.h. Или там не через C?
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
07.06.2011, 18:02     решил изучить с++ #173
Если приложение консольное, то в Windows можно использовать _getch() из conio.h. На других платформах это может быть реализовано по другому. Для GUI приложения аналога быть не может, там совсем другая модель исполнения.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.06.2011, 18:04     решил изучить с++ #174
Код не кроссплатформенный получится.
C
1
scanf("*");
При нажатии на ентер окошко захлопнется. Чем не вариант?
stdcout
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
07.06.2011, 18:15     решил изучить с++ #175
Мне нужна была функция, которая ждёт нажатия любой клавиши и возвращает её код.
Это не настолько важно, просто, хотелось попробовать реализовать или узнать, как могли её реализовать авторы библиотеки conio.h.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.06.2011, 18:31     решил изучить с++ #176
Можете скачать исходники ncurses, там реализована getch() для линукса. А исходники conio.h вы врядли найдете=)
Вроде еще можно ассемблерной вставкой сделать, здесь есть что-то похожее.
Bekcha
Сообщений: n/a
02.07.2011, 15:22     решил изучить с++ #177
Olejeg85, вы слишком наивны, если думаете, что с++ можно изучить за месяц. Там слишком много сложных и тонких мест. Это не Basic, который месяц и изучил почти полностью. С++- язык для профессионалов. Например, я вожусь с консольными приложениями уже почти полтора года и ещё есть, что изучать. А если вам необходимо освоить с++ на хорошем уровне(основы), то я готов вам подсобить. Могу абсолютно бесплатно научить вас осоновам с++. Если предложение вас заинтересовало, то пишите на dr.andrey-kalinin2011@yandex.ru(особенно, если вы школьник).
stdcout
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
29.08.2011, 14:56     решил изучить с++ #178
Никто не знает, примерно как можно реализовать функцию getch()? Ведь реализована же она как-то в conio.h. Или там не через C?
Сам спросил - сам отвечу. В книге Харта прочитал про функции для работы с консолью. Вот один из вариантов реализации getch() из <conio.h> для Windows.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int MyGetch()
{
    char   buffer[1] = { 0 };
    HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);
 
    if (hIn != INVALID_HANDLE_VALUE)
    {
        DWORD  dwNumber;
        DWORD  dwOldMode;
 
        GetConsoleMode(hIn, &dwOldMode);
        SetConsoleMode(hIn, ENABLE_PROCESSED_INPUT);
        ReadConsole(hIn, buffer, 1L, &dwNumber, NULL);
        SetConsoleMode(hIn, dwOldMode);
    }
    return ((int) (unsigned char) buffer[0]);
}
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
29.08.2011, 15:37     решил изучить с++ #179
stdcout, так а зачем вам?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2011, 16:22     решил изучить с++
Еще ссылки по теме:

Изучить VC++ вдоль и поперек в наикратчайший срок C++
C++ Решил изучить новую низкоуровневую область в программировании, что посоветуете?
Cтоит ли после изучения Си++ изучить Си C++

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

Или воспользуйтесь поиском по форуму:
stdcout
53 / 53 / 2
Регистрация: 06.04.2011
Сообщений: 210
29.08.2011, 16:22     решил изучить с++ #180
OstapBender,
stdcout, так а зачем вам?
да так, незачем. просто, до того, как узнал о функция WinAPI для работы с консолью, реализация этой функции казалась загадочной.
Yandex
Объявления
29.08.2011, 16:22     решил изучить с++
Ответ Создать тему
Опции темы

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