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

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


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

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

Выпуск № 523
от 13.09.2006, 17:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 388, Экспертов: 55
В номере:Вопросов: 3, Ответов: 9


Вопрос № 54651: Доброе время суток! Укажите, пожалуйста, на ошибку: при копировании информации происходит добавление буквы"я". Работа происходит в Borland C++ 5.02. Код выкладываю в приложении. И еще вопрос по ходу дела...В этой среде можно ли настроит...
Вопрос № 54710: Как мне в Visual C++ 7 Перевести тип данных из целого в строковую ? int -> string; И ещё где можно найти хороший справочник по функциям этого языка на русском языке... Заранее большое спасибо.. ...
Вопрос № 54716: Кто знает КАК прогрмным путём вызвать Alt-PrtScr! (Может API-функция есть какая-нибудь?!) А ещё точнее мне надо "сфоткать" только клиентскую область окна. С нетерпением жду ответа!!!...

Вопрос № 54.651
Доброе время суток!
Укажите, пожалуйста, на ошибку: при копировании информации происходит добавление буквы"я". Работа происходит в Borland C++ 5.02. Код выкладываю в приложении. И еще вопрос по ходу дела...В этой среде можно ли настроить параметры, чтобы дать свое имя выходному( скомпиллированному) файлу? ПО умолчанию идет noname00.exe. Работа идет под WinXp.
Спасибо за помощь!

Приложение:

Отправлен: 07.09.2006, 17:14
Вопрос задал: Joe Black (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Хватов Сергей
Здравствуйте, Joe Black!

feof() появляется уже после неудачного чтения, поэтому последний fgetc() возврацает EOF, а fputc() его выводит как 'я'

См. приложение

Приложение:

Ответ отправил: Хватов Сергей (статус: 4-ый класс)
Ответ отправлен: 07.09.2006, 17:33
Оценка за ответ: 5
Комментарий оценки:
Очень быстрый ответ!!! Огромное спасибо эксперту!!!


Вопрос № 54.710
Как мне в Visual C++ 7 Перевести тип данных из целого в строковую ?
int -> string;
И ещё где можно найти хороший справочник по функциям этого языка на русском языке... Заранее большое спасибо..
Отправлен: 08.09.2006, 10:42
Вопрос задала: Koran (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: dentist
Здравствуйте, Koran!
набор стандартных функций:

Convert a string to double (atof and _wtof), integer (atoi, _atoi64, _wtoi and _wtoi64), or long integer (atol and _wtol).

double atof(
const char *string
);
double _wtof(
const wchar_t *string
);
int atoi(
const char *string
);
__int64 _atoi64(
const char *string
);
int _wtoi(
const wchar_t *string
);
__int64 _wtoi64(
const wchar_t *string
);
long atol(
const char *string
);
long _wtol(
const wchar_t *string
);

и наобарот (собсно то, что вам и нужно):

#include <stdlib.h>

char *_itoa( int value, char *string, int radix );
wchar_t * _itow( int value, wchar_t *string, int radix );

---------
"Software is like sex, it's better then it's free" (c) Linus Torvalds
Ответ отправил: dentist (статус: 3-ий класс)
Ответ отправлен: 08.09.2006, 10:53

Отвечает: gitter
Здравствуйте, Koran!
int i=10;//целое число
char ch[255];//
itoa(ii,ch,10);//ch=="10"
Рекомендую, хороший справочник -
MSDN
Когда-то работал и русский MSDN
только не знаю, почему он теперь недоступен

Удачи!
Ответ отправил: gitter (статус: Студент)
Ответ отправлен: 08.09.2006, 11:01
Оценка за ответ: 5

Отвечает: AlexKlaip
Здравствуйте, Koran!

1.
Convert an integer to a string.

char *_itoa(
int value,
char *string,
int radix
);
char *_i64toa(
__int64 value,
char *string,
int radix
);
char * _ui64toa(
unsigned _int64 value,
char *string,
int radix
);
wchar_t * _itow(
int value,
wchar_t *string,
int radix
);
wchar_t * _i64tow(
__int64 value,
wchar_t *string,
int radix
);
wchar_t * _ui64tow(
unsigned __int64 value,
wchar_t *string,
int radix
);

2.
Write formatted data to a string.

int sprintf(
char *buffer,
const char *format [,
argument] ...
);
int swprintf(
wchar_t *buffer,
const wchar_t *format [,
argument] ...
);
swprintf(
wchar_t *buffer,
size_t count,
const wchar_t *format [,
argument]...
);

Parameters
buffer - Storage location for output
count - Maximum number of characters to store
format - Format-control string argument

Format-control string:

A format specification, which consists of optional and required fields, has the following form:
%[flags] [width] [.precision] [{h | l | I | I32 | I64}]type
Each field of the format specification is a single character or a number signifying a particular format option. The simplest format specification contains only the percent sign and a type character (for example, %s). If a percent sign is followed by a character that has no meaning as a format field, the character is copied to stdout. For example, to print a percent-sign character, use %%.
The optional fields, which appear before the type character, control other aspects of the formatting, as follows:
type
Required character that determines whether the associated argument is interpreted as a character, a string, or a number (see the printf Type Field Characters table.
flags
Optional character or characters that control justification of output and printing of signs, blanks, decimal points, and octal and hexadecimal prefixes (see the Flag Characters table). More than one flag can appear in a format specification.
width
Optional number that specifies the minimum number of characters output (see printf Width Specification).
precision
Optional number that specifies the maximum number of characters printed for all or part of the output field, or the minimum number of digits printed for integer values (see the How Precision Values Affect Type table).
h | l | I | I32 | I64
Optional prefixes to type-that specify the size of argument (see the Size Prefixes for printf and wprintf Format-Type Specifiers table).
Security Note Ensure that format specification strings are not user-defined. For example, consider a program that prompts the user to enter his name and stores the input in a string variable called name. To print name, do not do this:
printf( name ); // Danger! If name contains "%s", program will crash
Instead, do this:
printf( "%s", name );

3.
Если строка представлена классом CString
функция Format
CString str;
str.Format(_T("Left-justified integer: %.6d "), 35);
форматы как в sprintf.

Удачи.
Ответ отправил: AlexKlaip (статус: 1-ый класс)
Ответ отправлен: 08.09.2006, 11:03
Оценка за ответ: 3

Отвечает: Jadd
Здравствуйте, Koran!
О каком именно типе string идет речь - остается гадать. Ну допустим, что кроме указателей на байтовую последовательность (см. ответы предыдущих экспертов), Вас интересует класс CString. Тогда тут все предельно просто. Вот пример:

CString str;
int nNum = 10;
str.Format("%d", nNum);

Примерно так. Удачи.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Профессионал)
Адрес: Санкт-Петербург
WWW: http://www.sport-diary.ru
ICQ: 28260749
----
Ответ отправлен: 08.09.2006, 11:42
Оценка за ответ: 5

Отвечает: Hookest
Здравствуйте, Koran!

можно использовать функцию

char *_itoa(
int value,
char *string,
int radix
);
или для UNICODE

wchar_t * _itow(
int value,
wchar_t *string,
int radix
);
где: value - Ваше int, string - указатель на массив символов, а radix-система счисления.
Возвращается указатель на строку, ошибки не перехватывает.
на пример
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main( void )
{
char buffer[65];
int r;
for( r=10; r>=2; --r )
{
_itoa( -1, buffer, r );
printf( "base %d: %s (%d chars) ", r, buffer, strlen(buffer) );
}
}
А что касается справочника, я пользуюсь MSDN, а на русском - книг в сети очень много,что-то конкретное посоветовать не могу, разве что начать учить английский, в С++ это очень помогает.
Ответ отправил: Hookest (статус: 1-ый класс)
Ответ отправлен: 08.09.2006, 13:15
Оценка за ответ: 4

Отвечает: Mystic
Здравствуйте, Koran!
Вот, пожалуй, самый удобный способ (применим и для обратного преобразования при некотором изменении):
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
void main(){
int i;
cin >> i; //Вводим число
ostringstream os; //Строковый потом вывода
os << i; //Используем как и простой cout
string result = os.str(); //Преобразуем в объект типа string
char* result2 = result.c_str(); //Если необходимо, преобразуем в объект типа char*
//Внимание, result2 изменять нельзя (насколько я знаю), поэтому при необходимости придется создать другую переменную, куда вы скопируете это значение
}
Ответ отправил: Mystic (статус: 1-ый класс)
Ответ отправлен: 08.09.2006, 19:31
Оценка за ответ: 4


Вопрос № 54.716
Кто знает КАК прогрмным путём вызвать Alt-PrtScr!
(Может API-функция есть какая-нибудь?!) А ещё точнее
мне надо "сфоткать" только клиентскую область окна.
С нетерпением жду ответа!!!
Отправлен: 08.09.2006, 12:07
Вопрос задал: Яковлев Сергей Павлович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Physicist
Здравствуйте, Яковлев Сергей Павлович!

Вызвать Alt-PrtScr программно можно так:
keybd_event(VK_SNAPSHOT, 1, 0, 0);
keybd_event(VK_SNAPSHOT, 1, KEYEVENTF_KEYUP, 0);
НО! В буфер обмена будет скопировано активное окно, поэтому перед этим нужно сделать свое окно активным.
Ответ отправил: Physicist (статус: Студент)
Ответ отправлен: 08.09.2006, 12:42

Отвечает: Gremlin
Здравствуйте, Яковлев Сергей Павлович!
Для таких целей обычно используют сообщения WM_PRINT,WM_PRINTCLIENT, либо функцию PrintWindow
Ответ отправил: Gremlin (статус: 1-ый класс)
Ответ отправлен: 08.09.2006, 18:00


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.36 от 06.09.2006
Яндекс Rambler's Top100

В избранное