При комплиляции программа выдает a=0.00000,b=-9334555

122
27 сентября 2021, 10:20

уважаемые форумчане. Пишу программу по заданию(Даны 2 числа. Если они оба отрицательны, то первое уменьшить на 1, а второе увеличить на 1; если оба положительны, то большее из них удвоить, а меньшее утроить; в противном случае отрицательное из чисел заменить его абсолютным значением.). Но при компиляции программа мне выводит a=0.00000,и=-9673644... ; Дайте пожалуйста рекомендацию, где же я мог накосячить при написании программы. Прикладываю код.

#include <math.h>
#include <iostream>
using namespace std;
int main(void)
{
    float a, b,c;
    printf("vvedite a \n");
    scanf_s("%f", &a);
    printf("vvedite b \n");
    scanf_s("%f", &b);
    if (a&&b < 0)
    {
        a -= 1;
        b += 1;
    }
    if (a&&b > 0)
    {
        if (a > b)
        {
            a = a * 2;
            b = a * 3;
        }
        if (b > a)
        {
            b = b * 2;
            a = a * 3;
        }
        if (a&&b == 0)
        {
            a = fabs(a);
            b = fabs(b);
        }
        printf("a = %lf, b = %lf \n");
        scanf_s("%d", &c);
        return 0;
    }
}
Answer 1

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

 printf("a = %lf, b = %lf \n");

должен выводить два аргумента тип float, но вы их не передаете. Исправьте на:

printf("a = %lf, b = %lf \n", a, b);

А также закрывющую скобку тела if нужно поставить перед return 0; а не после.

И после исправления этих ошибок ваша программа не выполнит то, что вы ожидаете, потому что вы проверки условый выполняете неверно.

Answer 2

Во-первых, нужно исправить вывод. Правильно будет так: printf("a = %f, b = %f \n", a, b);

Во-вторых, исправить проверки в условиях. Когда сравниваете несколько чисел с константой, нужно делать это не сразу одним условием, а сравнивать каждое число отдельно, объединяя их логическими связками. Например,

if (a<0.0 && b<0.0) ... // Если оба отрицательны
if (a>0.0 && b>0.0) ... // Если оба положительны

В-третьих, раз уж пользуетесь идеологически-чистым вводом-выводом, нужно взять заголовочный файл stdio.h вместо iostream, и потом using namespace std уже не нужен.

В-четвёртых, вместо scanf_s надо использовать scanf, если не знаете, в чём разница. А вы не знаете, это видно по коду.

В-пятых, нужно вынести вывод данных и выход из функции ЗА пределы последнего if.

>> где же я мог накосячить при написании программы

Везде :)

READ ALSO
Как рисовать на представлении? Qt

Как рисовать на представлении? Qt

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

69
Не видит библиотеку при сборке приложения под android Qt

Не видит библиотеку при сборке приложения под android Qt

В общем, пишу небольшое приложение на С++ в Qt, которое сможет отрисовывать графы, использую стороннюю библиотеку Graphviz в QtПри дебаге приложения...

100
Прочитать весь std::cin в std::string

Прочитать весь std::cin в std::string

Как прочитать весь текущий std::cin одной операцией в строку std::string?

67
Некорректно работает Bootstrap v4 на Safari

Некорректно работает Bootstrap v4 на Safari

Есть данный кусок кода

95