Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2018, 10:16   #1
Sinli
Пользователь
 
Регистрация: 10.09.2018
Сообщений: 43
Радость Функция kub не возвращает значение. Помогите, пожалуйста, найти проблему в коде.

Добрый день, неделю назад начал изучать программирование на языке С по книге Стивена Прата. Не могу разобраться как использовать функцию с аргументом в задании 7 после 5 главы. Вот мой код:

Код:
#include <stdio.h>

void kub(double a);
int main(void)
{
        double b;
        printf("Введите число(целое или с плавающей точкой):\n");
        scanf("%lf", &b);
        kub(b);
        printf("Куб это числа: %f\n", b);
        return 0;
}
void kub(double a)
{
        a = a * a * a;

}
Результат выходит такой:
Введите число(целое или с плавающей точкой):
4
Куб это числа: 4

Очевидно функция kub - не работает.

Буду счастлив, если укажите на ошибку(-и)

______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.

Последний раз редактировалось Alex11223; 10.09.2018 в 10:24.
Sinli вне форума Ответить с цитированием
Старый 10.09.2018, 10:24   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так вы ж сами сказали, что b это аргумент.
В математике у вас х не изменялся от того, что его в sin() передали? А еще можно и просто число вместо значения переменной передать... kub(2)
А для возвращения значений есть return.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 10.09.2018 в 10:27.
Alex11223 вне форума Ответить с цитированием
Старый 10.09.2018, 10:40   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Он хотел написать :
Код:
double kub(double a);
int main(void)
{
        double b,y;
        printf("Введите число (целое или с плавающей точкой):\n");
        scanf("%lf", &b);
        y = kub(b);
        printf("Куб этого  числа: %f\n", y);
        return 0;
}
double kub(double a)
{
        return (a * a * a);
}
но так уж получилось...
Цитата:
(целое или
- это лишнее. Целое все равно воспримется как double

Последний раз редактировалось digitalis; 10.09.2018 в 10:43.
digitalis вне форума Ответить с цитированием
Старый 10.09.2018, 10:41   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

согласен, что красивее и надёжнее возвращать значение из функции.
но, если необходимо, то можно и переданную переменную изменить.
Для этого нужно передать значение переменной по ссылке:
Код:
void kub(double &a)
{
        a = a * a * a;

}
статья

p.s. пример кода на ideone - https://ideone.com/SSEra4
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.09.2018, 11:38   #5
Sinli
Пользователь
 
Регистрация: 10.09.2018
Сообщений: 43
По умолчанию

Спасибо вам. Вот этот код сработал.
Код:
#include <stdio.h>

double kub(double a);
int main(void)
{
        double b, y;
        printf("Введите число:\n");
        scanf("%lf", &b);
        y = kub(b);
        printf("Куб это числа: %.2f\n", y);
        return 0;
}
double kub(double a)
{
        a = a * a * a;

}
Я сейчас опасаюсь использовать return с каким либо значением кроме нуля. Так как в книге еще не описывалось его применение, а я стараюсь идти последовательно.


Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение

p.s. пример кода на ideone - https://ideone.com/SSEra4
К сожалению данный код у меня не смог пойти, компилятор не нашел в каталоге <iostream>
Sinli вне форума Ответить с цитированием
Старый 10.09.2018, 11:49   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Sinli Посмотреть сообщение
К сожалению данный код у меня не смог пойти, компилятор не нашел в каталоге <iostream>
iostream это С++, а не С.

И ссылки (double&) тоже, в С только указатели (double*).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 10.09.2018, 12:11   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Sinli Посмотреть сообщение
Спасибо вам. Вот этот код сработал.
а не должен был.

сравните с

Цитата:
Сообщение от digitalis Посмотреть сообщение
Код:
double kub(double a)
{
        return (a * a * a);
}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.09.2018, 12:58   #8
Sinli
Пользователь
 
Регистрация: 10.09.2018
Сообщений: 43
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а не должен был.
Почему-то работает и так, и так

Я тут немного изменил программу, возможно автор книги хотел, чтобы она принимала такой вид:

Код:
#include <stdio.h>

void kub(double a);
int main(void)
{
        double b;
        printf("Введите число:\n");
        scanf("%lf", &b);
        kub(b);
        return 0;
}
void kub(double a)
{
        a = a * a * a;
        printf("Куб вашего числа равен: %.2f\n", a);
}
Уже проверил, она тоже работает.
Sinli вне форума Ответить с цитированием
Старый 10.09.2018, 13:12   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Sinli Посмотреть сообщение
Почему-то работает и так, и так
Скорее всего повезло (undefined behavior), но наверно хотя бы варнинг любой современный компилятор должен выдать.

http://rextester.com/QAYI45459
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти проблему в коде damn_duzit Помощь студентам 0 24.02.2018 22:10
Помогите, пожалуйста, найти ошибку в коде (найти сумму факториалов чётных чисел в заданном диапазоне) kris14 Паскаль, Turbo Pascal, PascalABC.NET 8 25.10.2017 15:42
Функция не возвращает ожидаемое значение Мой повелитель Общие вопросы C/C++ 2 27.02.2016 14:18
помогите найти проблему в коде mato Помощь студентам 3 05.06.2009 22:58