Я начинающий программист, и я изучаю свой первый язык, C.
Я учусь в основном из книги «Как программировать» Дейтеля и Дейтеля, но также использую примеры заданий и вещи из университета, однако я застрял на одном.
У меня есть очень очень базовое понимание указателей - добавление & перед переменной заставляет ее печатать адрес и * использует указатель для использования значения, хранящегося по этому адресу или около того.
Кусок кода, который я написал, предназначен для вычисления наибольшего (наибольшего?) Общего знаменателя из двух чисел и на самом деле не нуждается в указателях или вообще не включает в них указатели. Он использует две функции, и логика полностью правильная, потому что он выводит правильный ответ на экран, если я делаю это из второй функции, а не возвращаю его в основную. Вот в чем проблема.
Когда вторая функция возвращает значение ответа, по какой-то причине она возвращает то, что я могу предположить только как указатель. Я понятия не имею, почему он это делает. Я был бы в состоянии работать с этим и преобразовать его, чтобы найти значение - однако он, кажется, является локальным указателем второй функции и переписан. Ничто в Интернете, которое я мог найти или в моей книге, не дало мне никакого представления о том, как решить проблему.
Спасибо, если вы прочитали это далеко. Я слишком много бродил.
Вот мой код и вывод. Любая помощь или указатели (извините за каламбур) будет принята с благодарностью. Я знаю, что мог бы просто напечатать его во второй функции, но я бы предпочел знать, как и почему он не возвращает значение так, как мне бы хотелось.
Код
#include <stdio.h>
int greatestCD (int num1, int num2);
int main(void)
{
int a=0, b=0;
int result;
printf("Please enter two numbers to calculate the greatest common denominator from\n");
scanf("%d%d", &a, &b);
result = greatestCD (a,b);
printf("Using the correct in main way:\nThe greatest common denominator of %d and %d is %d\n",a,b, result);
}
int greatestCD (int num1 ,int num2)
{
if (num2==0){
printf("Using the cheaty in gcd function way:\nThe greatest common denominator is %d\n",num1);
return num1;
} else {
greatestCD(num2,(num1%num2));
}
}
Вывод (используя 12 и 15 - ответ должен быть 3)
C:\Users\Sam\Documents\C programs>gcd
Please enter two numbers to calculate the greatest common denominator from
12
15
Using the cheaty in gcd function way:
The greatest common denominator is 3
Using the correct in main way:
The greatest common denominator of 12 and 15 is 2293524
Такое простое решение от frankodwyer. Это такие крошечные вещи, которые я либо не могу разглядеть, либо не знаю. Так что возвращалось не указатель, а просто мусор?
Спасибо за миллион.