Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 1056
от 17.04.2008, 01:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 474, Экспертов: 52
В номере:Вопросов: 4, Ответов: 4

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 131612: Есть edit, созданный процедурой hEditWnd=CreateWindowExW(0,L"Edit",0,WS_CHILD|WS_VISIBLE|WS_BORDER|ES_LEFT, 10,10,200,20,hWnd,0,hInstance,0); Далее в него засылается текст и ставится Setfocus: SendMessage(hEditWnd,WM_SETTEXT...
Вопрос № 131720: Здравствуйте, уважаемые эксперты! Помогите, пожалуйста, составить программу на языке программирования С для решения следующей задачи: " Пусть дан текстовый файл. Удалите строку с заданным номером. Если строки с указанным номером нет, сообщите об...
Вопрос № 131762: Здравствуйте, Уважаемые Эксперты! Помогите справится с проблемой, мучаюсь, ничего не могу сделать. Borland Builder 6. Пытаюсь в файл записать строку типа AnsiString f << Auto[N].model; выдает ошибку [C++ Error] Lab06_1.cpp(135): E2...
Вопрос № 131776: Уважаемы эксперты, необходимо срочно решить 3 задачи. 1. Дана действительная матрица размера m x m . Определить числа b0, b1, ..., bm равные соответственно: разностям наибольших и наименьших значений элементов строк. Работу с массивом органи...

Вопрос № 131.612
Есть edit, созданный процедурой
hEditWnd=CreateWindowExW(0,L"Edit",0,WS_CHILD|WS_VISIBLE|WS_BORDER|ES_LEFT,
10,10,200,20,hWnd,0,hInstance,0);
Далее в него засылается текст и ставится Setfocus:
SendMessage(hEditWnd,WM_SETTEXT,0,(LPARAM)szFile);
SetFocus(hEditWnd);

Теперь нужно поставить курсор на последнюю позицию, сделать это можно например кодом
SendMessage(hEditWnd, EM_SETSEL, strlen(hEditWnd->Text), strlen(hEditWnd->Text));

но здесь студия находит ошибку error C2039: 'Text' : is not a member of 'HWND__'
Собственно, таких ошибки 2, т. к. strlen вызывается 2 раза. Как исправить?
Отправлен: 11.04.2008, 00:53
Вопрос задал: Blackie (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Сандров Алекс
Здравствуйте, Blackie!

Не нужно путать хэндлы окон с классами.
Хэндл это хэндл и не больше (32-битная переменная), не указатель.

Если работаете с MFC, тогда надо сразу работать с EDIT-ом как с классом, через CEdit или CWnd.

Если чезер Win32API - тогда надо сначала получить текст в отдельную строчку

char szData[1024];
SendMessage(hEditWnd, WM_GETTEXT, szData, 1024);

и только потом с этим текстом работать на установке позиции курсора

SendMessage(hEditWnd, EM_SETSEL, strlen(szData), strlen(szData));

Ответ отправил: Сандров Алекс (статус: 7-ой класс)
Ответ отправлен: 11.04.2008, 07:34
Оценка за ответ: 5


Вопрос № 131.720
Здравствуйте, уважаемые эксперты! Помогите, пожалуйста, составить программу на языке программирования С для решения следующей задачи: " Пусть дан текстовый файл. Удалите строку с заданным номером. Если строки с указанным номером нет, сообщите об этом."
Отправлен: 11.04.2008, 17:01
Вопрос задал: Vesel4 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, Vesel4!
Задача не такая простая, как может показаться на первый взгляд. Ее можно решить копируя файл без "удаленной" строки либо в память либо в другой файл. В моем варианте используется память. Сначала подсчитывается кол-во строк в файле. Затем вводится номер удаляемой строки. На этом этапе отсекается ввод неверного номера строки. Затем файл построчно копируется в память с пропуском "удаляемой". После этого файл снова открывается (только теперь в режиме перезаписи) и строки из памяти переписываются обратно в файл. При этом главное не забывать освобождать выделенную ранее память. Текст программы в приложении. Язык С, компилятор MS VS 2005.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 16.04.2008, 06:41
Оценка за ответ: 5
Комментарий оценки:
Спасибо огромное! Всё работает!


Вопрос № 131.762
Здравствуйте, Уважаемые Эксперты! Помогите справится с проблемой, мучаюсь, ничего не могу сделать. Borland Builder 6. Пытаюсь в файл записать строку типа AnsiString
f << Auto[N].model;
выдает ошибку
[C++ Error] Lab06_1.cpp(135): E2094 'operator<<' not implemented in type 'ofstream' for arguments of type 'AnsiString'
Я так понял, что потоковая операция не рабоатет с типом AnsiString. Порывшись в справке, нашел, что для того чтобы работало все, т.е. были инициализированы потоковые операции (<< и >>) необходимо подключить вначале #include <iostream> или #define VCL_IOSTREAM перед #include <dstring.h>. Мол, это автоматически перегрузит << и >>:
ostream& operator << (ostream& os, const AnsiString& arg);
istream& operator >> (istream& is, AnsiString& arg);
Но все равно пишет ту же самую ошибку....
Подскажите, где я ошибся, или может есть еще способы, как можно записать ПОТОКОВО в файл переменную типа AnsiString.
Заранее всем спасибо.
Отправлен: 11.04.2008, 21:13
Вопрос задал: Djec (статус: 8-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Dr_Andrew
Здравствуйте, Djec!
А почему бы не попробовать записать так:
f << Auto[N].model.c_str();

P.S. Функция-член класса AnsiString c_str() возвращает указатель на строку, заканчивающуюся нулём, содержащую те же символы, что и строка AnsiString. А для char* оператор << определён.
Ответ отправил: Dr_Andrew (статус: 9-ый класс)
Ответ отправлен: 12.04.2008, 01:29
Оценка за ответ: 5
Комментарий оценки:
Спасибо, вполне правильный и понятный ответ. Работает.


Вопрос № 131.776
Уважаемы эксперты, необходимо срочно решить 3 задачи.

1. Дана действительная матрица размера m x m . Определить числа b0, b1, ..., bm равные соответственно: разностям наибольших и наименьших значений элементов строк. Работу с массивом организовать с выделением динамической памяти.

2. Реализовать класс: "Геометрический вектор". Данными-членами класса представить координаты вектора. Используя механизм перегрузки операций реализовать:
a. Конструктор по умолчанию, устанавливающий данные в ноль
б. Конструктор инициализации
в. Перегрузить операции: ++(постфикс),++(префикс),+,=
г. Методы ввода-вывода на экран координат вектора
д. Деструктор

3. Используя механизм наследования написать программу, реализующую иерархию
A->C<-B
У классов A, B, C присутствуют методы: конструктор инициализации, деструктор, вывод данных, (для класса A - a, для класса B - b т.д.) У классов A и B конструктор с 1 параметром, у класса С - с двумя параметрами (взятыми у классов A и B).

Заранее благодарю!
Отправлен: 11.04.2008, 23:02
Вопрос задал: Sticka (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, Sticka!
Решения ваших трех задач смотрите в приложении.

В первой массив b формируется проходом по строкам матрицы и сложением максимальных и минимальных элементов. Задача по нахождению таких элементов вынесена в отдельные функции.

Во второй задаче проблемы могут возникнуть при перегрузке постфиксных и префиксных операторов.

Для префиксных это:
T& operator ++ () {}

Для префиксных:
T operator ++ (int) {}

Параметр во втором случае не используется, а служит лишь для различия версий оператора. Предпочтительней использовать первую версию, т.к. в ней не используются никакие временные объекты.

Третья задача - это иллюстрация множественного наследования в C++. В любом учебнике по С++ можно найти пример подобный этому.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 15.04.2008, 09:05
Оценка за ответ: 5
Комментарий оценки:
спасибо! очень помогли, эти решения пригодятся не только мне))


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале

∙ Версия системы: 4.91 pre 5.0 RC1 от 13.04.2008

Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное