Значения, вставленные в мой параметр, внезапно исчезли после первого выражения

#c

Вопрос:

У меня есть проблемы с моей функцией, так как после первого выражения значения, вставленные в мои параметры (float x, float y), внезапно становятся равными 0.

Я вызвал эту функцию с помощью main (), вывод для c = x/y работает так, как ожидалось. Но для d = x — (y * c) это дает мне результат 0, я проверяю, в чем проблема, и, похоже, это связано с x и y, так как они оба по какой-то причине имеют значения 0

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

»’

 int gcd (float x, float y) {  int c = x / y;  printf ("This's your quotient: %dn", c); int d = x - ( y * c ); // d = 0 since y, x = 0 printf ("This's your remainder: %dn", d);   printf ("c %dn",c); // works normally printf ("y %fn",y); // y = 0 printf ("x: %fn",x); // x = 0 }  

Комментарии:

1. Не могли бы вы поделиться тем, что вы называете этой функцией, выводом, который она выдает, и почему вы считаете, что этот вывод неверен?

2. Я вызвал эту функцию с помощью main (), вывод для c = x/y работает так, как ожидалось. Но для d = x — (y * c) это дает мне результат 0, я проверяю, в чем проблема, и, похоже, это связано с x и y, так как они оба по какой-то причине имеют значения 0

3. Обновите вопрос с помощью кода вместо комментария, включающего тестовые данные. Это не самый большой алгоритм с общим знаменателем (gcd). Ваш gcd(17, 2) дает мне 8, 1, 2.0 и 17.0 (не уверен, почему вы печатаете x и y в обратном порядке, хотя это не имеет значения).

4. Единственная проблема, которую я вижу с кодом, заключается в том, что вы передаете его в формате float, но выполняете целочисленную математику. gcd(16.1,2) возвращает 2 и 0, что неверно (d должен быть 0,1). Если y равен 0, у вас есть деление на ноль, а если y мал, то c может переполниться.

5. Спасибо за совет, Аллан, я все еще выясняю, как использовать переполнение стека. И то, что ваш результат, кажется, работает нормально. Но по какой-то причине, когда я вставляю значения, x y становится 0. Например, мои результаты для (25,7) равны 4 , 0 , 0,00, 0,00

Ответ №1:

Вот пример кода, который устраняет проблемы, которые я заметил, и изменяет подпись, чтобы отделить вычисления от вывода:

 #include lt;stdio.hgt;  void quotient_reminder(unsigned x, unsigned y, unsigned *q, unsigned *r) {  if(y == 0) return;  *q = x / y;  *r = x - (y * *q); // d = 0 since y, x = 0 }  int main() {  unsigned q, r;  quotient_reminder(25.0, 7.1, amp;q, amp;r);  printf ("This's your quotient: %un", q);  printf ("This's your remainder: %un", r); }   

и это вернется:

 This's your quotient: 3 This's your remainder: 4