почему я получаю 0 вместо результата вычисления x - y и x / y в C - PullRequest
0 голосов
/ 07 декабря 2018

В этом коде я думал, что получу результат вычисления x / y и x - y, но программа показывает 0 для i и j.Что не так?

#include <stdio.h>

float calculate(float, float);
float i, j;

int main()
{
    float a, b;

    printf("Enter two numbers:\n");
    scanf("%f%f", &a, &b);
    printf("\nThe results are: %f  %f  %f\n", calculate(a, b), i, j);

    return 0;
}

float calculate(float x, float y)
{
    float r;

    r = x * y;
    i = x / y;
    j = x - y;
    return r;
}

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Это может быть связано с разбором, ссылкой и порядком выполнения аргументов в функции printf.Функция printf использует аргументы справа налево.Вы можете легко проверить заказ по нижеуказанным кодам.

#include <stdio.h>

float calculate(float, float);
float i, j;

int main()
{
    float a, b;

    printf("Enter two numbers:\n");
    scanf("%f%f", &a, &b);
    //printf("\nThe results are: %f  %f  %f\n", calculate(a, b), i, j);
    printf("\nThe results are: %f  %f  %f\n", i, j, calculate(a, b));

    return 0;
}

float calculate(float x, float y)
{
    float r;

    r = x * y;
    i = x / y;
    j = x - y;
    return r;
}
0 голосов
/ 07 декабря 2018

Это неопределенное поведение , когда вы вызываете функцию Calculate () в том же printf, и i, а также j вычисляются в этом printf (та же функция).Кстати, не рекомендуется использовать глобальные переменные (i, j) ... Только для целей тестирования, вы можете вычислить () до следующего printf для i и j.

Вы можете проверитьэто поведение с:

#include <stdio.h>

float calculate(float, float);
float i, j;
int main()
{
    float a, b;

    printf("Enter two numbers:\n");
    scanf("%f%f", &a, &b);
    printf("\nThe results are: %f", calculate(a, b));
    printf("    %f    %f\n", i, j);

    return 0;
}

float calculate(float x, float y)
{
    float r;

    r = x * y;
    i = x / y;
    j = x - y;
    return r;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...