Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Я начинающий, подскажите как...(Все вопросы начинающих - постить только здесь!!!)

1
24 ноября 2007 года
kot_
7.3K / / 20.01.2000
Эта тема предназначена для вопросов начинающих в программировании. Если вы только начинаете программировать и столкнулись с тем, что ваш HelloWord (как вариант - новая суперОС) - не компилируется по непонятной причине, хотя код вы один в один взяли из книжки (интернета, придумали сами), то скорей всего ваш вопрос НУЖНО размещать только в этой теме. Перед тем как его создать - обязательно воспользоваться поиском. Только в этой теме вы не рискуете нарваться на - RTFM, иди в ЧАВО, иди в гугль и в конце концов просто иди на ... - при условии конечно что в данной теме вопрос не задавался. Или если вы не задаете вопрос типа "расскажите мне подробно что такое шаблоны в С++" - т.е. вопрос, в ответ на который проще послать в вышеуказанное. Если же вы решили что, ваш вопрос настолько нов и свеж что никто до этого не спрашивал на форуме "как мне прочесть файл с использованием потока" и создали отдельную тему - не обессудьте - в лучшем случае тема будет закрыта, в худшем удалена - и вы получите нарушение.
Страницы:
320
17 февраля 2008 года
m_Valery
1.0K / / 08.01.2007
Цитата: Ден Зурин
Теперь мой вопрос.
В C++ есть такое ключевое слово - template для написания шаблонов. Объясните, хотя бы вкратце, что это за шаблоны такие, для чего они нужны и как их использовать? Ни в одном учебнике по C++ ничего не говорится про шаблоны. Нет их и в книге Б. Страуструпа. Видимо, они появились в C++ недавно?


Как это у Страуструпа нет шаблонов !!! :eek: Язык программирования С++,специальное издание ,глава 13.стр.377.Во втором издании - глава 8.Да в любом учебнике по С++,что значит нет ? Не смеши! Хотя бы Стэнли Липпман.Язык программирования С++.Вводный курс. Джосьюттис,Вандервуд Шаблоны С++. Целая книга о шаблонах. Поиск по форуму рулит.

30K
17 февраля 2008 года
Ден Зурин
28 / / 17.02.2008
Цитата: m_Valery
Как это у Страуструпа нет шаблонов !!! :eek: Язык программирования С++,специальное издание ,глава 13.стр.377.Во втором издании - глава 8.


Ясно, просто у меня первое издание (1995 г.), там template даже не упомянуто в списке ключевых слов:

Цитата:
Следующие идентификаторы зарезервированы для использования в качестве ключевых слов и не могут использоваться иным образом:
 
Код:
asm       auto      break     case      char
    class     const     continue  default   delete
    do        double    else      enum      extern
    float     for       friend    goto      if
    inline    int       long      new       operator
    overload  public    register  return    short
    sizeof    static    struct    switch    this
    typedef   union     unsigned  virtual   void
    while

Идентификаторы signed и volatile зарезервированы для применения в будущем.


А глава 8 описывает использование потоков.

Цитата:
Да в любом учебнике по С++,что значит нет ?


Увы. :( Хотя, возможно, у меня просто устаревшая литература (1995-2000 гг., а шаблоны, как я понял, появились позже - в Borland C++ 3.1, например, их нет).

Цитата:


Насчет второй ссылки - там неполный вариант книги, только первые 2 главы, где не говорится про шаблоны. Но на том же сайте я нашел еще одну книгу Липпмана (шаблоны там описаны): http://anatolix.naumen.ru/files/books/lippman_ruz.zip
Сейчас посмотрю книгу по третьей ссылке. Вообще-то я уже находил документацию по шаблонам, но она не была рассчитана на начинающих (тех, вообще не знаком с шаблонами).
Как я понял, шаблон - это расширение перегрузки функций, и он позволяет использовать одну и ту же функцию или класс для обработки данных различных типов, чтобы не писать несколько вариантов?

320
17 февраля 2008 года
m_Valery
1.0K / / 08.01.2007
Значит,смотри книгу Стэнли Липпмана.Например,глава 10 - Шаблоны функций.стр.467,глава 16 - Шаблоны классов,стр.776.И саму книгу С++ Templates(3-я ссылка) - там о шаблонах есть все.:),правда она есть только на английском(на русском только в бумажном виде и купить ее давно нельзя) и она не для начинающих.
30K
17 февраля 2008 года
Ден Зурин
28 / / 17.02.2008
Извиняюсь, я имел в виду вторую ссылку, на книгу Липпмана. Там неполная версия (глав 10 и 16 нет). В предыдущем сообщении я привел ссылку на другую книгу Липпмана ("Essential C++"), на русском кстати, где описаны шаблоны.
Я не начинающий, программирую на C++ уже 8 лет, но раньше не знал про существование шаблонов.
Так, начинаю что-то понимать... :) Рассмотрим такой пример на C:
Код:
#include <stdio.h>

int nsqr(int x)
{
return x*x;
}

float fsqr(float x)
{
return x*x;
}

int main(int argc, char* argv[])
{
int n;
float f;
printf("Hello World!\n");
n=2;
printf("%d^2=%d\n", n, nsqr(n));
f=1.5;
printf("%.2f^2=%.2f\n", f, fsqr(f));
return 0;
}

Очевидно, что объявлять много функций неудобно. Проще было бы, если бы была одна функция sqr(x), работающая и с целыми, и с вещественными числами.
В Си для такой задачи используются макросы:
Код:
#include <stdio.h>

#define SQR(x) ((x)*(x))

int main(int argc, char* argv[])
{
int n;
float f;
printf("Hello World!\n");
n=2;
printf("%d^2=%d\n", n, SQR(n));
f=1.5;
printf("%.2f^2=%.2f\n", f, SQR(f));
return 0;
}

Но макросы часто становятся непредсказуемыми (например, SQR(n++)), кроме того, они сильно увеличивают код, если описание макроса длинное, а используется он часто.
В C++ появилось новое средство для решения данной проблемы, называемое шаблонами. Вот тот же пример на C++:
Код:
#include <stdio.h>

template<class T> T sqr(T x)
{
return x*x;
}

int main(int argc, char* argv[])
{
int n;
float f;
printf("Hello World!\n");
n=2;
printf("%d^2=%d\n", n, sqr(n));
f=1.5;
printf("%.2f^2=%.2f\n", f, sqr(f));
return 0;
}

Надеюсь, я нигде не ошибся? В Visual C++ это работает. :)
13K
18 февраля 2008 года
ftphost
11 / / 10.12.2007
Дело такое.. .
Код:
#include ...
//----------------
int   func(int);
void vivod(int);
//----------------
void main ()
{
     clrscr();
     int x,y;
     scanf ("%d",&x);
     y = func(x);
     vivod (y);
     getch();
}
//=======================================================
int func(int a)
{
   int i;
   for (i=0; a>0; a--)
     i++;
   return i;
}
//=======================================================
void vivod (int b)
{
     int i;
     int mas;                        //
     for (i=0; i<b; i++)              // данный цикл и вывод не важны.
      printf ("%d", mas);
}


Суть моего вопроса заключается в том, что мне не понятно почему не получается зарезирвировать массив. При компиляции этого кода выдается сообщение об ошибке "Constant expression required". Он резервирует массив только если указать число эллементов в ручную. например /* int mas[10] */. а если описать какую либо переменную, придать ей значение (не важно каким способом), и описать массив используя эту переменную компилятор выдает ошибку приведенную выше.
11
18 февраля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: ftphost
Дело такое.. .
Код:
#include ...
//----------------
int   func(int);
void vivod(int);
//----------------
void main ()
{
     clrscr();
     int x,y;
     scanf ("%d",&x);
     y = func(x);
     vivod (y);
     getch();
}
//=======================================================
int func(int a)
{
   int i;
   for (i=0; a>0; a--)
     i++;
   return i;
}
//=======================================================
void vivod (int b)
{
     int i;
     int mas;                        //
     for (i=0; i<b; i++)              // данный цикл и вывод не важны.
      printf ("%d", mas);
}


Суть моего вопроса заключается в том, что мне не понятно почему не получается зарезирвировать массив. При компиляции этого кода выдается сообщение об ошибке "Constant expression required". Он резервирует массив только если указать число эллементов в ручную. например /* int mas[10] */. а если описать какую либо переменную, придать ей значение (не важно каким способом), и описать массив используя эту переменную компилятор выдает ошибку приведенную выше.



потому как на этапе компиляции под переменную (массив) выделяется определенное кол-во памяти, если туда засунуть переменную, компилятор не может предугадать размер резервируемой памяти.
выход: создавать динамически int *mas = new int;
PS: после использования не забыть удалить delete []mas;

13K
18 февраля 2008 года
ftphost
11 / / 10.12.2007
Цитата: oxotnik333
потому как на этапе компиляции под переменную (массив) выделяется определенное кол-во памяти, если туда засунуть переменную, компилятор не может предугадать размер резервируемой памяти.
выход: создавать динамически int *mas = new int;
PS: после использования не забыть удалить delete []mas;



А можно ли как нибудь обойти эту ошибку? Просто к моменту создания массива значение переменной будет определенно.

p.s.
благодарю за ответ. познавательно*

11
18 февраля 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: ftphost
А можно ли как нибудь обойти эту ошибку? Просто к моменту создания массива значение переменной будет определенно.



читай внимательно

 
Код:
int *mas = new int;
1
18 февраля 2008 года
kot_
7.3K / / 20.01.2000
Цитата: ftphost
А можно ли как нибудь обойти эту ошибку? Просто к моменту создания массива значение переменной будет определенно.

p.s.
благодарю за ответ. познавательно*



Или объявить константную переменную:

 
Код:
const int MAX_SIZE_DIM = 512;

или
 
Код:
#define MAX_SIZE_DIM = 512
87
19 февраля 2008 года
Kogrom
2.7K / / 02.02.2008
Цитата:
#define MAX_SIZE_DIM = 512


По моему тут лишний знак "="...

А вообще, какой способ объявления констант в c++ лучше? Вроде, в учебниках рекомендуют const, но в исходниках чаще используют #define. Неужели дело только в том, что авторы исходников хотят, чтоб если потребуется, их проект с меньшими затратами труда мог быть переделан для c-компиляторов?

353
19 февраля 2008 года
Nixus
840 / / 04.01.2007
Цитата: Kogrom
А вообще, какой способ объявления констант в c++ лучше?


Лучше без #define. Все, что можно достаточно просто сделать без препроцессора, лучше делать без препроцессора.

31K
19 февраля 2008 года
Большой Синий Кит
5 / / 21.11.2007
Я новичок в С++. Программировал на яве. Основы с++ более-менее прошел. Хочется кодить уже с гуи.
В связи с этим вопрос к опытным: что предпочтительней выбрать - чистое WinAPI, MFC, WTL или лучше всего в конце концов Qt (и просто, и кроссплатформенность). Вопроса ребром о кроссплатформенности не стоит, просто насколько я видел, работать с Qt гораздо проще и нагляднее, чем с MFC или WTL.
Подскажите, пожалуйста!
1
19 февраля 2008 года
kot_
7.3K / / 20.01.2000
Цитата: Kogrom
По моему тут лишний знак "="...

А вообще, какой способ объявления констант в c++ лучше? Вроде, в учебниках рекомендуют const, но в исходниках чаще используют #define. Неужели дело только в том, что авторы исходников хотят, чтоб если потребуется, их проект с меньшими затратами труда мог быть переделан для c-компиляторов?


:) Естественно лишний. По инерции.
Понятие "лучшего" не существует. Определите для себя единую нотацию и следуйте ей.
Использование констант в данном плане гораздо более предпочтительно - вы получаете четко названную область памяти и с четко определенным типом.

1
19 февраля 2008 года
kot_
7.3K / / 20.01.2000
Я новичок в С++. Программировал на яве. Основы с++ более-менее прошел. Хочется кодить уже с гуи.
В связи с этим вопрос к опытным: что предпочтительней выбрать - чистое WinAPI, MFC, WTL или лучше всего в конце концов Qt (и просто, и кроссплатформенность). Вопроса ребром о кроссплатформенности не стоит, просто насколько я видел, работать с Qt гораздо проще и нагляднее, чем с MFC или WTL.
Подскажите, пожалуйста!


Это тема для начинающих а не для тех, кому не о чем поговорить. Просьба в дальнейшем это учитывать. По вопросу что вам выбрать - на форуме тема обсасывалась как минимум десяток раз. используйте поиск - если сами не в состоянии определиться что вам надо.
Размещение в тематическом форуме изначально флеймовых тем не приветствуется и наказывается.

36K
20 февраля 2008 года
nikola254
7 / / 20.02.2008
Программировать я не умею совершенно, поэтому и вопросы наверно очень тупые... Поэтому заранее извиняюсь.


1) Если написать вот так:

char n;
cin>>n;

то после запуска программы надо будет ввести некоторый символ, после чего нажать Enter, после чего этот введённый символ запишется в переменную n.

Собственно вопрос: можно ли сделать так, чтобы Enter не нажимать? То есть чтобы после нажатия, допустим, клавиши "a" в переменную n записывался символ "а".

2) Нужно вывести на экран некую строку. Далее дождаться нажатия кнопки Enter и вывести другую строку.
Как вывести строку понятно, а вот как определить нажатие клавиши Enter?


Заранее спасибо!
1.8K
21 февраля 2008 года
CilCatblack
251 / / 20.09.2007
Цитата: nikola254
Нужно вывести на экран некую строку. Далее дождаться нажатия кнопки Enter и вывести другую строку.
Как вывести строку понятно, а вот как определить нажатие клавиши Enter?



Тебе нужно получить код символа.:)
Сообщения windows----WM_KEYDOWN, WM_KEYUP.
код клавиши Enter -13;

1
21 февраля 2008 года
kot_
7.3K / / 20.01.2000
Цитата: nikola254
Программировать я не умею совершенно, поэтому и вопросы наверно очень тупые... Поэтому заранее извиняюсь.


1) Если написать вот так:

char n;
cin>>n;

то после запуска программы надо будет ввести некоторый символ, после чего нажать Enter, после чего этот введённый символ запишется в переменную n.

Собственно вопрос: можно ли сделать так, чтобы Enter не нажимать? То есть чтобы после нажатия, допустим, клавиши "a" в переменную n записывался символ "а".


Код:
#pragma hdrstop
#include <iostream.h>
#include <conio.h>

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
char a;
a = getch();
cout << a << "UUUU";
        return 0;
}


Цитата: nikola254

2) Нужно вывести на экран некую строку. Далее дождаться нажатия кнопки Enter и вывести другую строку.
Как вывести строку понятно, а вот как определить нажатие клавиши Enter?


Заранее спасибо!


 
Код:
while(getch()!=13);
cout <<"rrr";

2CilCatblack я не предупреждал вас что ответы не по теме приравниваются к флейму и наказываются? Предупреждаю
36K
22 февраля 2008 года
nikola254
7 / / 20.02.2008
Программа должна делать следующие действия:

- задавать некий вопрос
- считывать ответ пользователя; ответ на русском языке
- задавать некий вопрос
- считывать ответ пользователя; ответ на английском языке
- дальше всё по новой

В результате пользователю постоянно придётся менять раскладку клавиатуры. Спрашивается: можно ли раскладку клавиатуры менять как-то в программе, чтобы пользователю этого делать не приходилось?
1
22 февраля 2008 года
kot_
7.3K / / 20.01.2000
Цитата: nikola254
Программа должна делать следующие действия:

- задавать некий вопрос
- считывать ответ пользователя; ответ на русском языке
- задавать некий вопрос
- считывать ответ пользователя; ответ на английском языке
- дальше всё по новой

В результате пользователю постоянно придётся менять раскладку клавиатуры. Спрашивается: можно ли раскладку клавиатуры менять как-то в программе, чтобы пользователю этого делать не приходилось?


 
Код:
LoadKeyboardLayout("00000409", KLF_ACTIVATE); // Английский
LoadKeyboardLayout("00000419", KLF_ACTIVATE); // Русский

Использование для консоли:
 
Код:
HWND hWnd = GetForegroundWindow();
SendMessage(hWnd,WM_INPUTLANGCHANGEREQUEST,1,(DWORD)LoadKeyboardLayout("00000419", 0));
36K
22 февраля 2008 года
nikola254
7 / / 20.02.2008
Цитата: kot_
 
Код:
LoadKeyboardLayout("00000409", KLF_ACTIVATE); // Английский
LoadKeyboardLayout("00000419", KLF_ACTIVATE); // Русский

Использование для консоли:
 
Код:
HWND hWnd = GetForegroundWindow();
SendMessage(hWnd,WM_INPUTLANGCHANGEREQUEST,1,(DWORD)LoadKeyboardLayout("00000419", 0));



А можно, пожалуйста, поподробней, как это используется?
Попробовал вставить первый код - написалось сообщенеи об ошибке - не известно KLF_ACTIVATE... Попробовал второй - тоже ошибки.
Посмотрел в инете - вроде бы для этих функций нужно что-то типа такого написать:

 
Код:
#include <winuser.h>

Попробовал - не помогло.

Даже если просто написать:
 
Код:
#include <winuser.h>

int main(){
    return 0;
}

выдаются ошибки...

Что делать?
И кстати, что означает "для консоли"? :confused:
1
22 февраля 2008 года
kot_
7.3K / / 20.01.2000
#include <windows.h>
36K
22 февраля 2008 года
nikola254
7 / / 20.02.2008
Цитата: kot_
#include <windows.h>



Вот программа:

Цитата:
#include <windows.h>


int main(){
LoadKeyboardLayout("00000409", KLF_ACTIVATE);
LoadKeyboardLayout("00000419", KLF_ACTIVATE);
return 0;
}



говорит: `KLF_ACTIVATE' undeclared (first use this function) :confused:

1
22 февраля 2008 года
kot_
7.3K / / 20.01.2000
[highlight=cpp]
#include <iostream.h>
#include <conio.h>
#include <windows.h>

//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
char a;
a = getch();
cout << a << "\tIs EN";
HWND hWnd = GetForegroundWindow();
SendMessage(hWnd,WM_INPUTLANGCHANGEREQUEST,1,(DWORD)LoadKeyboardLayout("00000419", 0));
cout <<'\n';
a = getch();
cout << a << "\tIs RU";
return 0;
}
[/highlight]
36K
23 февраля 2008 года
nikola254
7 / / 20.02.2008
Цитата: kot_
[highlight=cpp]
#include <iostream.h>
#include <conio.h>
#include <windows.h>

//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
char a;
a = getch();
cout << a << "\tIs EN";
HWND hWnd = GetForegroundWindow();
SendMessage(hWnd,WM_INPUTLANGCHANGEREQUEST,1,(DWORD)LoadKeyboardLayout("00000419", 0));
cout <<'\n';
a = getch();
cout << a << "\tIs RU";
return 0;
}
[/highlight]



Ввёл... Вот что мне ответили:

Цитата:
g++.exe -x c++ -c E:\1.c -o E:\1.o -Wall -fpermissive
E:\1.c: In function `int main()':
E:\1.c:11: warning: implicit declaration of function `int GetForegroundWindow(...)'
E:\1.c:11: warning: initialization to `void *' from `int' lacks a cast
E:\1.c:12: `WM_INPUTLANGCHANGEREQUEST' undeclared (first use this function)
E:\1.c:12: (Each undeclared identifier is reported only once
E:\1.c:12: for each function it appears in.)
E:\1.c:12: warning: implicit declaration of function `int LoadKeyboardLayout(...)'
E:\1.c:12: warning: implicit declaration of function `int SendMessage(...)'
Failure

1
23 февраля 2008 года
kot_
7.3K / / 20.01.2000
правильно ответили. Радуйтесь что компиляторы - это политкорректный и толерантый инструмент - иначе последним было бы сообщение:
Цитата:
E:\1.c:12: warning: before to put a question, specify the operating system and compiler which you work with, dimwit

36K
23 февраля 2008 года
nikola254
7 / / 20.02.2008
Цитата:
E:\1.c:12: warning: before to put a question, specify the operating system and compiler which you work with, dimwit


ОС: WinXP
компилятор: g++ (хотя я точно не знаю, ибо не в курсе, как это определить...)

1
23 февраля 2008 года
kot_
7.3K / / 20.01.2000
Уже лучше.
В таком случае - вам необходимо собирать ваш проект с библиотекой User32.lib (указать в командной строке дополнительную опцию). Посмотрите в справке как это правильно сделать в вашем случае, я просто не помню, а так как конкретный компилятор вы не указали, гадать не собираюсь. Кроме этого, может быть вам понадобятся еще библиотеки - смотрите описание конкретных функций.
Вероятнее всего - или в интернете, или у себя, в примерах к вашему компилятору вы найдете пример make-файла - в котором как правило указываються все зависисмости - создайте его и вам не нужно будет каждый раз указывать командную строку.
36K
23 февраля 2008 года
nikola254
7 / / 20.02.2008
Цитата: kot_
Уже лучше.
В таком случае - вам необходимо собирать ваш проект с библиотекой User32.lib (указать в командной строке дополнительную опцию). Посмотрите в справке как это правильно сделать в вашем случае, я просто не помню, а так как конкретный компилятор вы не указали, гадать не собираюсь. Кроме этого, может быть вам понадобятся еще библиотеки - смотрите описание конкретных функций.


"конкретный компилятор" - вроде Jens' File Editor
Справки нету...

Цитата:

Вероятнее всего - или в интернете, или у себя, в примерах к вашему компилятору вы найдете пример make-файла - в котором как правило указываються все зависисмости - создайте его и вам не нужно будет каждый раз указывать командную строку.



Вот makefile из примеров:

Код:
EXE=hellow.exe glex.exe dining.exe calendar.exe glhw.exe
%.exe : %.c
    gcc $< -o $@ -Wl,-s -Os
all: $(EXE) massey.scr

clean:
    @del *.exe
    @del *.o
    @del *.org
    @del *.scr

massey.scr: glmuss.c
    gcc -Os -Wl,-s -mwindows glmuss.c -o massey.scr -lscrnsave -ladvapi32

Что с ним делать - не имею ни малейшего представления:(
32K
25 февраля 2008 года
Sharrp
13 / / 25.02.2008
Здравствуйте. Для закрепления знаний по программированию требуется практика, которой катасрофически мало. При этом с выбором задания всегда проблемы. Поэтому прошу вас посоветовать мне проект, приближенный к реальной рабочей ситуации. Разброс тем сколь угодно широкий. Язык программирования - C#. (Все сводится к тому, что для устройства на работу требуется иметь опыт в программировании, который получить можно именно на работе, ведь учебные задачки никакого толку в этом направлении не дают. Никто не хочет брать без опыта)
32K
26 февраля 2008 года
Gmp_
11 / / 12.11.2007
здраствуйте, нашел программу которая считывает с 60 порта скан коды нажатых клавиш и выводит на экран в разных форматах, но на каждый кейс начиная с 4 компилятор выдает следующее:
Цитата:
Warning codekbd.cpp 4: Unreachable code
Warning codekbd.cpp 5: Unreachable code

....
Warning codekbd.cpp 84: Unreachable code


почему это происходит, что сделано не правильно, и как решить эту проблему, не меняя сути программы :confused:

main.cpp

Код:
#include <iostream.h>
#include <conio.h>
#include "codekbd.cpp"

void main()
{
int res;
int port =0x60;
do{
clrscr();
res = inportb(port);
cout<<"Порт: "<<hex<<port<<endl;
cout<<"Скан код (Hex): "<<hex<<res<<endl;
cout<<"Скан код (Dec): "<<dec<<res<<endl;
cout<<"ASCII код: "<<(char)res<<endl;
cout<<"Символ: "<<symbol(res);
}while(getch()!=27);
}


codekbd.cpp
Код:
char* symbol(int result)
{
switch (result){
   case 1:return "ESC";break;
   case 2:return "1";break;
   case 3:return "2";break;
   case 4:return "3";break;
   case 5:return "4";break;
   case 6:return "5";break;
   case 7:return "6";break;
   case 8:return "7";break;
   case 9:return "8";break;
   case 10:return "9";break;
   case 11:return "0";break;
   case 12:return "-";break;
   case 13:return "=";break;
   case 14:return "Bksp";break;
   case 15:return "Tab";break;
   case 16:return "Q";break;
   case 17:return "W";break;
   case 18:return "E";break;
   case 19:return "R";break;
   case 20:return "T";break;
   case 21:return "Y";break;
   case 22:return "U";break;
   case 23:return "I";break;
   case 24:return "O";break;
   case 25:return "P";break;
   case 26:return "[";break;
   case 27:return "]";break;
   case 28:return "Enter";break;
   case 29:return "Ctrl";break;
   case 30:return "A";break;
   case 31:return "S";break;
   case 32:return "D";break;
   case 33:return "F";break;
   case 34:return "G";break;
   case 35:return "H";break;
   case 36:return "J";break;
   case 37:return "K";break;
   case 38:return "L";break;
   case 39:return ";";break;
   case 40:return "'";break;
   case 41:return "`";break;
   case 42:return "Shft";break;
   case 43:return "\\";break;
   case 44:return "Z";break;
   case 45:return "X";break;
   case 46:return "C";break;
   case 47:return "V";break;
   case 48:return "B";break;
   case 49:return "N";break;
   case 50:return "M";break;
   case 51:return ",";break;
   case 52:return ".";break;
   case 53:return "/";break;
   case 55:return "*";break;
   case 59:return "F1";break;
   case 60:return "F2";break;
   case 61:return "F3";break;
   case 62:return "F4";break;
   case 63:return "F5";break;
   case 64:return "F6";break;
   case 65:return "F7";break;
   case 66:return "F8";break;
   case 67:return "F9";break;
   case 68:return "F10";break;
   case 71:return "Home";break;
   case 72:return "Up";break;
   case 73:return "Page Up";break;
   case 74:return "-";break;
   case 75:return "Left";break;
   case 77:return "Right";break;
   case 78:return "+";break;
   case 79:return "End";break;
   case 80:return "Down";break;
   case 81:return "Page Down";break;
   case 82:return "0";break;
   case 83:return "Delete";break;
   case 86:return "\\";break;
   case 87:return "F11";break;
   case 88:return "F12";break;

   default:return "";break;
}
return "NULL";
}
3
26 февраля 2008 года
Green
4.8K / / 20.01.2000
После return break не нужен.
А return "NULL" вообще никогда не вызовется, т.к. его перекрывает default:return "";

Цитата: Gmp_

codekbd.cpp
Код:
char* symbol(int result)
{
switch (result){
   case 1:return "ESC";break;
   case 2:return "1";break;
   case 3:return "2";break;
   case 4:return "3";break;
   case 5:return "4";break;
   case 6:return "5";break;
   case 7:return "6";break;
   case 8:return "7";break;
   case 9:return "8";break;
   case 10:return "9";break;
   case 11:return "0";break;
   case 12:return "-";break;
   case 13:return "=";break;
   case 14:return "Bksp";break;
   case 15:return "Tab";break;
   case 16:return "Q";break;
   case 17:return "W";break;
   case 18:return "E";break;
   case 19:return "R";break;
   case 20:return "T";break;
   case 21:return "Y";break;
   case 22:return "U";break;
   case 23:return "I";break;
   case 24:return "O";break;
   case 25:return "P";break;
   case 26:return "[";break;
   case 27:return "]";break;
   case 28:return "Enter";break;
   case 29:return "Ctrl";break;
   case 30:return "A";break;
   case 31:return "S";break;
   case 32:return "D";break;
   case 33:return "F";break;
   case 34:return "G";break;
   case 35:return "H";break;
   case 36:return "J";break;
   case 37:return "K";break;
   case 38:return "L";break;
   case 39:return ";";break;
   case 40:return "'";break;
   case 41:return "`";break;
   case 42:return "Shft";break;
   case 43:return "\\";break;
   case 44:return "Z";break;
   case 45:return "X";break;
   case 46:return "C";break;
   case 47:return "V";break;
   case 48:return "B";break;
   case 49:return "N";break;
   case 50:return "M";break;
   case 51:return ",";break;
   case 52:return ".";break;
   case 53:return "/";break;
   case 55:return "*";break;
   case 59:return "F1";break;
   case 60:return "F2";break;
   case 61:return "F3";break;
   case 62:return "F4";break;
   case 63:return "F5";break;
   case 64:return "F6";break;
   case 65:return "F7";break;
   case 66:return "F8";break;
   case 67:return "F9";break;
   case 68:return "F10";break;
   case 71:return "Home";break;
   case 72:return "Up";break;
   case 73:return "Page Up";break;
   case 74:return "-";break;
   case 75:return "Left";break;
   case 77:return "Right";break;
   case 78:return "+";break;
   case 79:return "End";break;
   case 80:return "Down";break;
   case 81:return "Page Down";break;
   case 82:return "0";break;
   case 83:return "Delete";break;
   case 86:return "\\";break;
   case 87:return "F11";break;
   case 88:return "F12";break;

   default:return "";break;
}
return "NULL";
}


А вообще, это жуть!
Почему бы не использовать обычный массив?
И возвращать надо, кстати, не char*, а const char*.

87
26 февраля 2008 года
Kogrom
2.7K / / 02.02.2008
Эта программа написано на хитром диалекте или в ней куча ошибок.

1. Не включена библиотека для манипулятора hex (требуется #include <iomanip>).Зато включен исполняемый файл: #include "codekbd.cpp"...

2. Явно требуется строчка using namespace std; так как ввод-вывод почти в стиле c++.

3. Почему void main(), а не int?

и т.д.

Кроме того, автор вопроса ошибается, что компилятор ругается на 4-й case. Он ругается на первый.
32K
26 февраля 2008 года
-radik-
9 / / 19.09.2007
вот у меня вопрос:
кирилица при выводе в файл
пробувал
BOOL SetConsoleCP(UINT wCodePageID);
BOOL SetConsoleOutputCP(UINT wCodePageID);
но абракадабра остается :-\
вот пример с потоками, но чет он не работает(в фаиле пустота):
...
int main()
{
fstream file;
file.open("d:\\text.txt");
if (!file) {cout << "error in open file\n"; getch();
return 1;}
char str[80];
cin >> str;
file << str;
file.close();
}
подскажите пожалуйста, а лучше дайте готовый код или ссылку...
32K
26 февраля 2008 года
Gmp_
11 / / 12.11.2007
вот впринципе рабочий пример:
Цитата:
ВЫВОД В ФАЙЛОВЫЙ ПОТОК
Заголовочный файл fstream.h определяет класс выходного файлового потока с именем ofstream. Используя объекты класса ofstream, ваши программы могут выполнять вывод в файл. Для начала вы должны объявить объект типа ofstream, указав имя требуемого выходного файла как символьную строку, что показано ниже:
ofstream file_object("FILENAME.EXT");
Если вы указываете имя файла при объявлении объекта типа ofstream, C++ создаст новый файл на вашем диске, используя указанное имя, или перезапишет файл с таким же именем, если он уже существует на вашем диске Следующая программа OUT_FILE.CPP создает объект типа ofstream и затем использует оператор вставки для вывода нескольких строк текста в файл BOOKINFO.DAT:
#include <fstream.h>
void main(void)
{
ofstream book_file("BOOKINFO.DAT");
book_file << "Учимся программировать на языке C++, " << "Вторая редакция" << endl;
book_file << "Jamsa Press" << endl;
book_file << "22.95" << endl;
}
В данном случае программа открывает файл BOOKINFO.DAT и затем записывает три строки в файл, используя оператор вставки.


но думаю проблема в том што в нево все выводится в кодировке ASCII (дос) а когда ты открываешь блокном то видишь в ANSI (виндовс) и отсюда абракадабра, проверить просто - либо если пользуешся тотал коммандером нажать F3 (внутренний просмотровщик) там можно через меню "вид" просмотреть и в дос и в виндовс кодировке, а можно в блокноте, установив шрифт.. Terminal кажется... точно не помню

добавлено:
аа.. сразу не заметил, ты хочешь именно при выводе в АНСИ преобразовывать чтоб мона было блокнотом открывать штоль?

32K
26 февраля 2008 года
-radik-
9 / / 19.09.2007
да
ввожу, например "русский текст", и в файле(открываемом блокнотом) "русский текст" записано
32K
26 февраля 2008 года
Gmp_
11 / / 12.11.2007
незнаю помогу или нет, но может че-то сказаное даст тебе идею, в каком компиляторе работаешь? если в TurboC++ то думаю ничево подобново там нет, поэтому или ручкаи или никак, если чето постарше типа билдера то может быть и есть какието функции, а вообще дам пару ссылок, ты посмотри, можеть быть чето поможет,
_http://www.realcoding.net/article/view/1872#r6 тут не совсем то что тебе нужно, "Как конвертировать строку из кодировки WIN в KOI" но может сам принцип понять поможет
вот пару ссылок еще
_http://sources.codenet.ru/download/1652/%F3%F7%E5%E1%ED%FB%E5_%EF%F0%E8%EC%E5%F0%FB.html
_http://www.sysman.ru/index.php?showtopic=3584
_http://www.sources.ru/cpp/faqs/78.htm
_http://forum.sysman.ru/index.php?showtopic=6678&st=30
32K
27 февраля 2008 года
-radik-
9 / / 19.09.2007
Цитата: Gmp_

_http://sources.codenet.ru/download/1652/%F3%F7%E5%E1%ED%FB%E5_%EF%F0%E8%EC%E5%F0%FB.html


не компилируется >_<
пользуюсь DevC++ 4.9.9.2
error`ы:
`gotoxy' undeclared (first use this function)
`clrscr' undeclared (first use this function)
[Warning] comparison is always false due to limited range of data type

Код:
char* Decode_DOS_to_Win(char * str)
{
    unsigned char *cstr=str;//"unsigned" - чтоб избежать предупреждений комп-ра
    for(; *cstr; cstr++)
    {
        if(*cstr>=128 && *cstr<=175)
            *cstr+=64;
        else if(*cstr>=224 && *cstr<=239)
            *cstr+=16;
        else if(*cstr==252)
            *cstr=185;
    }
    return str;
}
скомпелил... эффекта никакого:-\ что с этой функой абра-кдбра что без неё :-/
87
27 февраля 2008 года
Kogrom
2.7K / / 02.02.2008
Будет работать в win2000, XP
Код:
#include <fstream>
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    SetConsoleCP(GetACP());
    fstream file;
    file.open("text.txt", ios::out);
    char str[80];
    if (!file)
    {
        cout << "error in open file\n";
        cin >> str;//getch();
        return 1;
    }
    cin >> str;
    file << str;
    file.close();
    return 0;
}
37K
29 февраля 2008 года
Laika
1 / / 29.02.2008
Компилятор (Вorland c++ 3.0) в упор не видит библиотеку iostream.h и вообщене видит каких либо библиотек, а потому даже простая программа Hello world вызывает у него недоумение. Подскажите пожалуйста?
1
29 февраля 2008 года
kot_
7.3K / / 20.01.2000
Цитата: Laika
Компилятор (Вorland c++ 3.0) в упор не видит библиотеку iostream.h и вообщене видит каких либо библиотек, а потому даже простая программа Hello world вызывает у него недоумение. Подскажите пожалуйста?


Недоумение как правило вызывают подобные вопрошающие - не считающие необходимым привести хотя бы, текст ошибки которую они получают. Я предполагаю что это ошибка кода спрашивающего на уровне генотипа.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог