Поиск:

Ответ в темуСоздание новой темы Создание опроса
> возвратить значение, типа char 
V
    Опции темы
susanin
Дата 20.3.2007, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 7



здравствуйте, великие спецы в с++!!! у меня тут возник такой вопрос...мне необходимо из функции возвратить в основную программу значение типа char...как мне это сделать????
PM MAIL   Вверх
RatHat
Дата 20.3.2007, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: -1
Всего: 1



А функция какая?
что возвращает? какой тип данных?
код в студию ;)

Это сообщение отредактировал(а) RatHat - 20.3.2007, 11:58
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
RatHat
Дата 20.3.2007, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: -1
Всего: 1



Код

//объявление функции:
char MyFunction(char *c);

//реализация функции:
char MyFunction(char *ch)
{
    //ну например вот так
    *ch = 'q';
    return *ch;
}


//использование функции:
//выведем сообщение по нажатию кнопки
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    char mychar;
    String s = String(MyFunction(&mychar));
    ShowMessage(s);
}

--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
susanin
Дата 20.3.2007, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 7



к примеру у меня сделано вот так...
Код

char sum(char bin1[], char bin2[])
{
//.........здесь код, который складывает 2 двоичных числа
//........
return();//что надо писать в return чтобы потом в main возвращалось значение типа char???
}


PM MAIL   Вверх
Fazil6
Дата 20.3.2007, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 11
Всего: 60



Цитата(susanin @  20.3.2007,  11:21 Найти цитируемый пост)
return();//что надо писать в return чтобы потом в main возвращалось значение типа char???

в чем проблема? тебе надо символ вернуть или строку С ?
PM MAIL   Вверх
susanin
Дата 20.3.2007, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 7



мне надо вернуть результат работы char sum(char bin1[], char bin2[])....т.е. сумму двух двоичных чисел bin1 и bin2...  а она в формате строки...  к примеру 
Код

char sum(char bin1[], char bin2[])
{
    bin1[5];
     bin2[5];
    char rez[5],mem= '0';
   int i,j, len_bin1=strlen(bin1),len_bin2=strlen(bin2),rezult;
for (i=len_bin1;i>=0;i--)
 for (j=len_bin2;j>=0;j--)
    {
       if (bin1[i] == '0' && bin2[i] == '0' && mem == '0')
            rez[i]= '0', mem = '0';
       else
       if (bin1[i] == '0' && bin2[i] == '1'&& mem == '0')
            rez[i] = '1', mem = '0';
       else
       if (bin1[i] == '1' && bin2[i] == '0'&& mem == '0')
            rez[i] = '1', mem = '0';
       else
       if (bin1[i] == '1' && bin2[i] == '1' && mem == '0')
            rez[i] = '0', mem = '1';
       else
       if (bin1[i] == '0' && bin2[i] == '0' && mem == '1')
            rez[i] = '1', mem = '0';
       else
       if (bin1[i]== '0' && bin2[i] == '1' && mem == '1')
           rez[i] = '0', mem = '1';
       else
       if (bin1[i] == '1' && bin2[i] == '0' && mem == '1')
           rez[i] = '0', mem = '1';
       else
       if (bin1[i] == '1' && bin2[i] == '1' && mem == '1')
          rez[i] = '1', mem = '1';
    }
return ?;//чтобы потом в главной программе можно было вызвать фун-ю sum и она бы сложила 2 числа
}

PM MAIL   Вверх
RatHat
Дата 20.3.2007, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: -1
Всего: 1



ну так...

return *rez;

только почему у тебя результат тоже массив на 5 символов?
должен быть на 6. потому что при условии что складываешь, например 10010 и 11010 получишь результат  101100 - 6-тизначный.
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
Fazil6
Дата 20.3.2007, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 11
Всего: 60



передавай 3-м параметром буфер для результата
Код


void sum(char bin1[], char bin2[], char rez[])
{
   char mem= '0';
   
    int len_bin1=strlen(bin1);
    int len_bin2=strlen(bin2);

    for (int i = len_bin1; i >= 0 ; i--)
    for (int j = len_bin2; j >= 0; j--)
    {
       if (bin1[i] == '0' && bin2[i] == '0' && mem == '0')
            rez[i]= '0', mem = '0';
       else
       if (bin1[i] == '0' && bin2[i] == '1'&& mem == '0')
            rez[i] = '1', mem = '0';
       else
       if (bin1[i] == '1' && bin2[i] == '0'&& mem == '0')
            rez[i] = '1', mem = '0';
       else
       if (bin1[i] == '1' && bin2[i] == '1' && mem == '0')
            rez[i] = '0', mem = '1';
       else
       if (bin1[i] == '0' && bin2[i] == '0' && mem == '1')
            rez[i] = '1', mem = '0';
       else
       if (bin1[i]== '0' && bin2[i] == '1' && mem == '1')
           rez[i] = '0', mem = '1';
       else
       if (bin1[i] == '1' && bin2[i] == '0' && mem == '1')
           rez[i] = '0', mem = '1';
       else
       if (bin1[i] == '1' && bin2[i] == '1' && mem == '1')
          rez[i] = '1', mem = '1';
    }
}


Добавлено @ 12:55 
Цитата(RatHat @  20.3.2007,  11:49 Найти цитируемый пост)
ну так...return *rez;

щас... 
нельзя.

Это сообщение отредактировал(а) Fazil6 - 20.3.2007, 12:56
PM MAIL   Вверх
susanin
Дата 20.3.2007, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 7



Цитата(Fazil6 @  20.3.2007,  12:54 Найти цитируемый пост)
передавай 3-м параметром буфер для результата

передал...а что возвращать то??? что то не пойму никак... если написать просто return rez; товыдается ошибка о невозможности конвертации char* to char..

PM MAIL   Вверх
Fazil6
Дата 20.3.2007, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 11
Всего: 60



Цитата(susanin @  20.3.2007,  17:15 Найти цитируемый пост)
передал...а что возвращать то??? что то не пойму никак... если написать просто return rez; товыдается ошибка о невозможности конвертации char* to char..

я же написал. Функция ничего не возвращает. Внутри функции пишется в твой массив rez и после вызова в нем будет лежать твой результат. return здесь не нужен
PM MAIL   Вверх
susanin
Дата 20.3.2007, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 7



Fazil6, мне необходимо чтобы потом можно было вызвать эту функцию... чтобы например потом ввести 2 двочных числа а эта функция бы их сложила...
например
Код

char sum(char bin1[], char bin2[])
{...........
...........
...........
return ?;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char x1[]={'1','0','1','0','\0'};
char x2[]={'0','1','0','1','\0'};
rez = sum (x1,x2);
Panel1->Caption = rez;
}

вот что то вроде такого надо...если я неправильно начал что то делать, то подскажи как мне и что надо поправить...

Это сообщение отредактировал(а) susanin - 20.3.2007, 18:48
PM MAIL   Вверх
UniBomb
Дата 20.3.2007, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 97



Код

void sum(char bin1[], char bin2[], char *rez[])
{
 //тут делай что хочеш, главное в качестве результата используй rez.
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
char x1[]={'1','0','1','0','\0'};
char x2[]={'0','1','0','1','\0'};
char result[];
sum (x1,x2,&result); //в переменной result сохранится готовое значение
Panel1->Caption = result;

}

PM MAIL ICQ Skype   Вверх
Fazil6
Дата 20.3.2007, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 11
Всего: 60



Код

void sum(char bin1[], char bin2[], char *rez)
{...........
...........
...........
rez[n] = '\0' ; // ставим завершающий 0
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char x1[]={'1','0','1','0','\0'};
char x2[]={'0','1','0','1','\0'};
char rez[8];
sum (x1,x2, rez);
Panel1->Caption = rez;
}

тока с размерами акуратнее, чтобы не вылезти за пределы rez

Добавлено @ 19:41 
UniBomb, твое даже не скомпиллируется...
PM MAIL   Вверх
susanin
Дата 20.3.2007, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 7



Fazil6,странно..но все равно не пашет...пишет ошибки 
  [C++ Error] Unit1.cpp(18): E2188 Expression syntax
  [C++ Error] Unit1.cpp(67): E2293 ) expected
  [C++ Error] Unit1.cpp(67): E2141 Declaration syntax erro
Код

char sum(char bin1[], char bin2[], *rez)
{
    char bin1[];
    char bin2[];
    char rez[6];
    char mem= '0';
   int i,j, len_bin1=strlen(bin1),len_bin2=strlen(bin2),rezult;
for (i=len_bin1;i>=0;i--)
 for (j=len_bin2;j>=0;j--)
    {
       if (bin1[i] == '0' && bin2[i] == '0' && mem == '0')
            rez[i]= '0', mem = '0';
       else
       if (bin1[i] == '0' && bin2[i] == '1'&& mem == '0')
            rez[i] = '1', mem = '0';
       else
       if (bin1[i] == '1' && bin2[i] == '0'&& mem == '0')
            rez[i] = '1', mem = '0';
       else
       if (bin1[i] == '1' && bin2[i] == '1' && mem == '0')
            rez[i] = '0', mem = '1';
       else
       if (bin1[i] == '0' && bin2[i] == '0' && mem == '1')
            rez[i] = '1', mem = '0';
       else
       if (bin1[i]== '0' && bin2[i] == '1' && mem == '1')
           rez[i] = '0', mem = '1';
       else
       if (bin1[i] == '1' && bin2[i] == '0' && mem == '1')
           rez[i] = '0', mem = '1';
       else
       if (bin1[i] == '1' && bin2[i] == '1' && mem == '1')
          rez[i] = '1', mem = '1';
    }
    rez[n] = '\0' ;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char x1[]={'1','0','0','1'};
char x2[]={'0','1','1','0'};
char rez[8];
rez = sum(x1,x2,rez);
Panel1->Caption = rez;
}

где же у меня все таки ошибка?

Это сообщение отредактировал(а) susanin - 20.3.2007, 19:57
PM MAIL   Вверх
UniBomb
Дата 20.3.2007, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 97



Fazil6, 

Хех, это почему же? В смысле я показал как делать, а не что делать. Если немного поправить, то получится следующее:

Код

char sum(char bin1[], char bin2[], char *rez)
{
    char bin1[];
    char bin2[];
    char mem= '0';
    rez = new char(6+1);  //+1 для символа конца строки
   int i,j, len_bin1=strlen(bin1),len_bin2=strlen(bin2),rezult;
for (i=len_bin1;i>=0;i--)
 for (j=len_bin2;j>=0;j--)
    {
       if (bin1[i] == '0' && bin2[i] == '0' && mem == '0')
            *rez[i]= '0', mem = '0';
       else
       if (bin1[i] == '0' && bin2[i] == '1'&& mem == '0')
            *rez[i] = '1', mem = '0';
       else
       if (bin1[i] == '1' && bin2[i] == '0'&& mem == '0')
           *rez[i] = '1', mem = '0';
       else
       if (bin1[i] == '1' && bin2[i] == '1' && mem == '0')
            *rez[i] = '0', mem = '1';
       else
       if (bin1[i] == '0' && bin2[i] == '0' && mem == '1')
            *rez[i] = '1', mem = '0';
       else
       if (bin1[i]== '0' && bin2[i] == '1' && mem == '1')
           *rez[i] = '0', mem = '1';
       else
       if (bin1[i] == '1' && bin2[i] == '0' && mem == '1')
           *rez[i] = '0', mem = '1';
       else
       if (bin1[i] == '1' && bin2[i] == '1' && mem == '1')
          *rez[i] = '1', mem = '1';
    }
    *rez[n] = '\0' ;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char x1[]={'1','0','0','1'};
char x2[]={'0','1','1','0'};
char rez[6];
rez = sum(x1,x2,&rez);
Panel1->Caption = rez;
}

PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0650 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.