Нет видимости else

190
05 апреля 2018, 14:08
    #include<iostream>
using namespace std ;
int main()
{
int N , month ,year , mas ,amt  , posi, nega ;
nega , posi = 0;
int maxi , mini = 0 ;
cin >> N ;
for(int i = 0 ; i < N ; i++)
    cin >> month >> year >> mas >> amt ;
if ((mas/amt) < 0) 
{   if((mas/amt)<mini)
    {mini=(mas/amt) ;
    nega=year ;}
    else 
        if((mas/amt)>maxi)
    {
        maxi=(mas/amt) ;
        posi=year  ;}
}
cout << posi << ' '  << nega << endl;
}

Почему нет видимости второго цикла с posi (else if)? Выводит верно только результат работы с nega.

Answer 1

Стоит отформатировать текст...

#include<iostream>
using namespace std ;
int main()
{
    int N , month , year , mas , amt  , posi, nega ;
    nega , posi = 0;
    int maxi , mini = 0 ;
    cin >> N ;
    for (int i = 0 ; i < N ; i++)
        cin >> month >> year >> mas >> amt ;
    if ((mas / amt) < 0)
    {
        if ((mas / amt) < mini)
        {
            mini = (mas / amt) ;
            nega = year ;
        }
        else if ((mas / amt) > 0)
            if ((mas / amt) > maxi)
            {
                maxi = (mas / amt) ;
                posi = year  ;
            }
    }
    cout << posi << ' '  << nega << endl;
}

и сразу станет видно, что else никогда работать не будет. Просто потому, что для условия (mas / amt) >= 0 ветви просто нет!

Столь же очевидно - при форматировании - что цикл ваш к if-else не имеет никакого отношения... Что сначала вы вводите N раз что-то там, но обрабатываете только последний ввод...

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

Update из жалости :)

Дальше у вас будут проблемы из-за целочисленного деления, неинициализированной maxi и т.п. Так что, предваряя массу ваших вопросов - что-то мне кажется, что хотели вы написать вот это

#include<iostream>
using namespace std ;
int main()
{
    int N, month, year;
    double mas, amt;
    int posi = 0, nega = 0;
    double maxi = DBL_MIN, mini = DBL_MAX;
    cin >> N ;
    for (int i = 0 ; i < N ; i++)
    {
        cin >> month >> year >> mas >> amt ;
        if (mas/amt < mini)
        {
            mini = mas / amt;
            nega = year;
        }
        if (mas/amt > maxi)
        {
            mini = mas / amt;
            posi = year;
        }
    }
    cout << posi << ' '  << nega << endl;
}
READ ALSO
QWidget окну задать родителя по HWND

QWidget окну задать родителя по HWND

Операционная система WindowsQt 5

151
Обновить данные на панели

Обновить данные на панели

Как перезагрузить панель не перезагружая страницу? Мне просто нужно обновлять данные по кликуПробовал

200