C программирование: прототип функции

Я посреди чтения "C Primer Plus" Стивена Прата. В 7-м упражнении по программированию 5-й главы вам нужно "написать программу, которая запрашивает двойной номер типа, и напечатать значение номера кубика. Используйте функцию своего собственного дизайна, чтобы кубировать значение и распечатать его. должен передать введенное значение этой функции ".

Что я делаю не так? Когда я запускаю это, я получаю только тот номер, который я ввел.

#include <stdio.h>
void cube(****** n);
int main(void)
{
 ****** a;
 printf("Enter a Number: ");
 scanf("%lf", &a);
 cube(a);
 printf("%lf", a);

 return 0;
}

void cube(****** n)
{
 n = n * n * n;
}
</stdio.h>
7 ответов

Вам нужно вернуть значение!

#include <stdio.h>
****** cube(****** n);
int main(void)
{
 ****** a;
 printf("Enter a Number: ");
 scanf("%lf", &a);
 printf("%lf", cube(a));

 return 0;
}

****** cube(****** n)
{
 n = n * n * n;
 return n;

}
</stdio.h>

Если вы не хотите возвращать значения, вы можете использовать указатели

#include<stdio.h>
void cube(****** *n)
{
 *n = (*n) * (*n) * (*n);
}
int main()
{
 ****** n = 10;
 cube(&n);
 printf("%lf\n",n);
}
</stdio.h>


cube функции должен возвращать результат, например

#include <stdio.h>

****** cube(****** n);

int main(void)
{
 ****** a, b;

 printf("Enter a Number: ");
 scanf("%lf", &a);
 b = cube(a); // call 'cube()' to get cube of a and save in b
 printf("%lf", b);

 return 0;
}

****** cube(****** n)
{
 return n * n * n; // return n cubed as function result
}
</stdio.h>


Как уже упоминалось в других ответах, ваша функция cube должна возвращать значение. Однако вы можете сохранить тип возврата как void, если вы передадите указатель на n. Скобки для удобочитаемости.

void cube(int *n)
{
 // dereference the pointer and cube it
 *n = (*n) * (*n) * (*n);
}

int main()
{
 int n = 3;
 cube(&n); // address of n variable
 printf("%d\n", n);
 return 0;
}

Выходы 27.


Большое спасибо Пол Гриффитс за то, что внимательно прочитал вопрос!

Следуя вашим советам, код должен выглядеть так:

#include <stdio.h>
void cube(****** n);
int main(void)
{
 ****** a;
 printf("Enter a Number: ");
 scanf("%lf", &a);
 cube(a);

 return 0;
}

void cube(****** n)
{
 n = n * n * n;
 printf("%lf", n);
}
</stdio.h>


Ваша функция cube() выполняет кубирование значения, присвоенного a но не возвращает результат n.

Это означает, что переменная a back in main не изменилась.

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

a = cube(a);

Это будет означать, что a будет обновляться с результатом, возвращаемым функцией cube()


Вместо передачи значения a вы можете передать адрес a в main().

#include <stdio.h>
void cube(****** n);
int main(void)
{
 ****** a;
 printf("Enter a Number: ");
 scanf("%lf", &a);
 cube(&a); 
 printf("%lf", a);

 return 0;
}
</stdio.h>

Затем в кубе() измените то, на что указывает указатель n.

void cube(****** *n)
{
 *n = (*n) * (*n) * (*n);
}


Вы должны были передать n в функции void cube (****** n) в качестве ссылки.

void cube (****** &n)

Читайте о reference variables в C++ здесь http://www.tutorialspoint.com/cplusplus/cpp_references.htm.

licensed under cc by-sa 3.0 with attribution.