Skrócona wersja if-problem

Skrócona wersja if-problem
Sawy3R11
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 2 lata
  • Postów:66
0

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

Kopiuj
 #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 ?

Patryk27
Tak btw, to jest conditional operator ;)
Endrju
  • Rejestracja:około 22 lata
  • Ostatnio:prawie 2 lata
1

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

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

Użyj nawiasów:

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

"(...) otherwise, the behavior is undefined".
edytowany 1x, ostatnio: Endrju
Sawy3R11
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 2 lata
  • Postów:66
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

Kopiuj
#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ę ? :)

Patryk27
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
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.


edytowany 1x, ostatnio: Patryk27
msm
+1 za wspomnienie o ASLR :P
Endrju
  • Rejestracja:około 22 lata
  • Ostatnio:prawie 2 lata
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.


"(...) otherwise, the behavior is undefined".
Sawy3R11
masz racje że nie jest związany ale myślałem że jest bezsensowne tworzyć nowy temat ;)
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około godziny
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].

RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około rok
1

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.