Функция отображения не распечатывает никаких результатов - PullRequest
3 голосов
/ 02 июля 2019

Я написал функцию displayResults, в которой я передаю все свои вычисления в аргументы и печатаю каждую строку. Консольное приложение остается открытым каждый раз, когда запрашивает данные, но как только оно достигает функции displayResults, окно закрывается.

Я уже включил system("Pause); в надежде, что окно останется открытым, но оно не сработало.

Функция, о которой я говорю:

void displayResults(double force, double volume, char encodeTxt, double distance,
double tangent, double resist, double y)
{
    printf("The force = %lf\n", force);
    printf("The volume = %lf\n", volume);
    printf("The encoded character = %c", encodeTxt);
    printf("The distance = %lf", distance);
    printf("The tangent = %lf", tangent);
    printf("The resistance = %lf", resist);
    printf("The y value = %lf", y);

    system("Pause");
}    

Вот мой код:

double getForce(void)
{
    double force = 0, mass = 0, accel = 0;
    printf("Enter the mass:\n");
    scanf("%lf", &mass);
    printf("Enter the acceleration:\n");
    scanf("%lf", &accel);

    force = mass * accel;
    return force;
}

double getVolume(void)
{
    double volume = 0, radius = 0, height = 0;
    printf("Enter radius of cylinder:\n");
    scanf("%lf", &radius);
    printf("Enter height of cylinder:\n");
    scanf("%lf", &height);

    volume = PI * pow(radius, 2) * height;
    return volume;
}

char getEncode(void)
{
    char encodeTxt, plainTxt;
    int shift = 0;
    printf("Enter a character:\n");
    scanf(" %c", &plainTxt);
    printf("Enter an integer");
    scanf("%d", &shift);

    encodeTxt = (plainTxt - 'A') + 'a' - shift;
    return encodeTxt;
}

double getDistance(void)
{
    double distance = 0, x1 = 0, x2 = 0, y1 = 0, y2 = 0;
    printf("Enter first point:\n");
    scanf("%lf%lf", &x1, &y1);
    printf("Enter second point:\n");
    scanf("%lf%lf", &x2, &y2);

    distance = sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
    return distance;
}

double getTangent(void)
{
    double tangent = 0, theta = 0;
    printf("Enter the theta angle:\n");
    scanf("%lf", &theta);

    tangent = sin(theta) / cos(theta);
    return tangent;
}

double getResist(void)
{
    double resist = 0;
    int r1 = 0, r2 = 0, r3 = 0;
    printf("Enter three resistors:\n");
    scanf("%d%d%d", &r1, &r2, &r3);

    resist = 1 / (1 / r1 + 1 / r2 + 1 / r3);
    return resist;
}

double equation(void)
{
    double x = 0, y = 0, z = 0;
    int a = 0;
    printf("Enter the a value:\n");
    scanf("%d", &a);
    printf("Enter the x, y, z values:\n");
    scanf("%lf%lf%lf", &x, &y, &z);

    y = ((double)2 / (double)3) - y + z * x / (a % 2) + PI;
    return y;
}

И, наконец, моя основная функция:

int main(void)
{
    double force = 0, volume = 0, distance = 0, 
    tangent = 0, resist = 0, y = 0;
    char encodeTxt;

    force = getForce();
    volume = getVolume();
    encodeTxt = getEncode();
    distance = getDistance();
    tangent = getTangent();
    resist = getResist();
    y = equation();
    displayResults(force, volume, encodeTxt, distance, tangent, resist, y);
    return 0;
}

Я ожидаю, что консоль отобразит мои результаты, но после запроса последних значений x, y z из функции уравнения она перестает работать.

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Это проблема деления на ноль, представленная следующей функцией

double getResist(void)
{
    double resist = 0;
    int r1 = 0, r2 = 0, r3 = 0;
    printf("Enter three resistors:\n");
    scanf("%d%d%d", &r1, &r2, &r3);

    resist = 1 / (1 / r1 + 1 / r2 + 1 / r3);
    return resist;
}

Я только что отладил вашу программу, вы вводите r1, r2 и r3 как целое число.Таким образом,

1 / r1 + 1 / r2 + 1 / r3 = 0 !

Здесь будет «исключение с плавающей запятой».

Решение состоит в том, чтобы объявить r1, r2 и r3 как двойные.

0 голосов
/ 02 июля 2019
y = ((double)2 / (double)3) - y + z * x / (a % 2) + PI;

Мое первое, хотя это то, что а может быть четным, так что% 2 == 0, и вы не можете делить на ноль.Как только что-то / 0 оценивается, программа останавливается.

Вы можете попробовать напечатать что-нибудь до и после этого вычисления, чтобы проверить, прав ли я.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...