Модераторы: bsa
  

Поиск:

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


Шустрый
*


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

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



Доброго времени суток.
В процессе написания программы возник следующий тупик - при вызове, функция возвращает непонятный результат.
Вот основной .cpp
Код

#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
 double Ro_sg(double t,char razm);
 double Temp (double t,char razm);

int main(int argc, char *argv[])
{
    double T,t;
    char razm;
    
    
    
    while (razm!='q')
    {
    cout<<"Inter tempreche \n";
    cin>>T>>razm;
    //if (razm!='K') 
    T = Temp(T,razm);
    cout<<T<<" "<<razm<<"\n";
    cout<<Ro_sg(T,razm)<<" kg/m3 \n";
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}

И .cpp функции
Код

#include <stdio.h>
#include <iostream>

using namespace std;

double Temp (double t,char razm)
  {
   double Kelvin,Celsius,Far;  
      
    
           
         switch (razm)
          {
          case 'C':
          Celsius = t;
          
          Far=Celsius*(212-32)/100+32;
          Kelvin=Celsius+273.15;
          cout<<Far<<"F \n";
          cout<<Kelvin<<"K \n";
          
          return Kelvin, razm='K';
          break;
          case 'K':
           
            Kelvin = t;
            Celsius=Kelvin-273.15;
            Far=Celsius*(212-32)/100+32;  
            cout<<Far<<"F \n";
            cout<<Celsius<<"C \n";
           //break; 
           return Kelvin; 
           case 'F':
            
             Far = t;
         Celsius=100*(Far-32)/(212-32); 
         Kelvin=Celsius+273.15;
         //cout<<dKelvin<<"K \n";
         //cout<<dCelsius<<"C \n";
            //break; 
            return Kelvin, razm='K'; 
            default:
              cout<<"Inter propety - C,K or F \n" ;
              return 0;     
            
        }
        
}

При варианте "К" все работает правильно, при 2х других вариантах, возвращается значение "75" и не происходит переприсвоения переменной "razm".
Что неправильно?
PM MAIL   Вверх
Void
Дата 17.9.2009, 11:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 2
Всего: 173



Оператор «запятая» A, B вычисляет значение A, затем значение B и возвращает значение B. Таким образом:
Код
return Kelvin, razm='K';

сводится к
Код
return (razm = 'K');

Оператор присваивания в свою очередь тоже возвращает значение: левую часть после выполнения присваивания. Итого имеем просто
Код
return 'K';

ASCII код буквы K, как не сложно догадаться, 75.
Зачем вообще было использовать запятую, непонятно.

Во-вторых, чтобы изменение значения параметра функции проявилось на вызывающей стороне, нужно передавать параметр по указателю или по ссылку (в плюсах лучше последнее). Т.е. функцию надо объявить так:
Код
double Temp(double t, char &razm);



--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Langaru
Дата 17.9.2009, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Запятая была использованна для того, чтобы возвращались оба значения (точно не вспомню где прочел). Как тогда нужно написать, чтобы возвращалось и значение Kelvin и razm?
PM MAIL   Вверх
zim22
Дата 17.9.2009, 11:54 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

Репутация: 29
Всего: 69



Цитата(Langaru @  17.9.2009,  11:49 Найти цитируемый пост)
. Как тогда нужно написать, чтобы возвращалось и значение Kelvin и razm?

или структуру возвращай, содержащую в себе Kelvin и razm 
или не возвращай, а передавай в ф-ю параметры по ссылке/указателю и модифицируй их.


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


Шустрый
*


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

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



Спасибо. Попробую так.

Это сообщение отредактировал(а) Langaru - 17.9.2009, 12:36
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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