Skrócona wersja if-problem

0

Witam mam problem z skróconą wersją if : warunek ? gdyprawda : gdy fałsz. Oto krótki programik konsolowy który napisałem

 #include <iostream>

using namespace std;

int main()
{
    int a = 1;
    cout<<(a>0)?"wieksze od zera" : "niewieksze od zera";
    
    return 0;
}

W konsoli wyświetla mi się tylko 1. Co zrobiłem źle ?

1

Operator << ma wyższy priorytet niż ? :. Dlatego Twój kod to:

(cout << (a > 0)) ? "wieksze od zera" : "niewieksze od zera";

Użyj nawiasów:

cout << ((a > 0) ? "wieksze od zera" : "niewieksze od zera");
0

Dzięki wielki :)

mam jeszcze taki problem, w książce "Symfonia C++" przeczytałem że nazwa tablicy to jednocześnie adres zerowego elementu tablicy

#include <iostream>

using namespace std;

int main()
{
    int tab[7];
    for(int i=0;i<7;i++)
        tab[i]=i;

    cout<< tab;

    return 0;
}
 

Dlaczego zatem, jak wywołam ją w podany sposób pokazuje jakąś losową liczbę ? :)

3

Nie ukazuje losowej liczby, a adres pierwszego elementu (chociaż biorąc pod uwagę ASLR to może być rzeczywiście "losowe" ;>).
Spróbuj *tab.

1

Kolejna (niezwiązana) rzecz to powinien być kolejny wątek! Teraz temat nie jest związany z tym, o czy piszesz.

tab jest co prawda typu int[7] ale operator << to funkcja, a do funkcji tablicę można przekazać tylko za pomocą wskaźnika. Można więc o tab myśleć jak o int * - wskaźnik na int. To właśnie adres wskaźnika jest wypisywany, użyj *tab czyli jego wartości.

0

nazwa tablicy to jednocześnie adres zerowego elementu tablicy

Nazwa tablicy to adres tablicy. Adres tablicy jest oczywiście liczbowo równy adresowi elementu o indeksie [0].

1

Nazwa tablicy to tablica i nic więcej. Tablica może zostać natomiast niejawnie skonwertowana do wskaźnika na jej pierwszy element.

1 użytkowników online, w tym zalogowanych: 0, gości: 1