• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tekst przed funkcją a kolejnośc wyświetlenia w konsoli

Object Storage Arubacloud
+1 głos
379 wizyt
pytanie zadane 17 stycznia 2021 w C i C++ przez melman666 Nowicjusz (210 p.)
edycja 17 stycznia 2021 przez melman666
int pobierz();
int main()
{
    int a;
    a=pobierz();
    cout<<"zmienna A wynosi "<<a<<endl;
    cout<<"zmienna B wynosi "<<pobierz()<<endl;
    cout<<"zmienna C wynosi "<<pobierz()<<endl;
    return 0;
}

int pobierz()
{
    int liczba;
    while(1)
    {
        cout<<"Podaj liczbe wieksza od 0 ";
        cin>>liczba;
        if (liczba>0)return liczba;
    }
}

Wynik programu to:

Podaj liczbe wieksza od 0 2
zmienna A wynosi 2
Podaj liczbe wieksza od 0 2
zmienna B wynosi 2
Podaj liczbe wieksza od 0 2
zmienna C wynosi 2

Najpierw mam wywołanie pobierz()
następnie mam cout<<Zmienna B wynosi<<pobierz()<<endl; 
to czemu w konsoli najpiersz wypisuje mi pobierz() czyli podaj liczbę większą od 0 a potem dopiero test Zmienna B wynosi?

 

Czy chodzi o to że jeśli w jakieś instrukcji jest funkcja, to jest wykonywana jako pierwsza, mimo że przed nią jest jeszcze jakiś tekst do wyświetlenia?

komentarz 17 stycznia 2021 przez urbix01 Gaduła (3,290 p.)
Chyba jestem wstanie Ci pomóc ale powiedz jak ma wyglądać prawidłowy wynik programu

3 odpowiedzi

0 głosów
odpowiedź 17 stycznia 2021 przez Oscar Nałogowiec (29,320 p.)
To jest szersze zagadnienie, chodzi o kolejność obliczania argumentów różnych operatorów. Przykładowo czy w wyrażeniu A() + B() najpierw zostanie obliczone (wywołanie funkcji) A() czy B(). Nie ma to bezpośredniego powiązania z priorytetami i wiązaniem. Jedyne czego można być pewnym to operatory logiczne (|| i &&) - one gwarantują, że najpierw obliczają argument lewy i jeśli wynik całości jest już znany to prawy argument nie jest w ogóle obliczany.
komentarz 17 stycznia 2021 przez tkz Nałogowiec (42,000 p.)

Przykładowo czy w wyrażeniu A() + B() najpierw zostanie obliczone (wywołanie funkcji) A() czy B().

Jest to zdefiniowane przez standard, Left-to-right. 

komentarz 17 stycznia 2021 przez tkz Nałogowiec (42,000 p.)
Jesteśmy w C++, nie w C. Od wersji 11 są zmiany w "Order of evaluation".
0 głosów
odpowiedź 17 stycznia 2021 przez urbix01 Gaduła (3,290 p.)

Mogę się mylić ale wydaje mi się że cout jako parametr ma pobierz() więc najpierw wykonuje się ta funkcja wypisując " podaj liczbę większą od 0" a następnie kompilator czyta resztę kodu czyli "Zmienna B wynosi". Wszystko działa jak należy ale w tym przypadku funkcja pobierz jako parametr jest przetwarzana jako pierwsza i to jest źródłem problemu. Spróbuj to zrobić tak jak dla zmiennej A lub 

int pobierz();
int main()
{
    cout<<"Podaj liczbe wieksza od 0 ";
    int a;
    a=pobierz();
    cout<<"zmienna A wynosi "<<a<<endl;
    cout<<"zmienna B wynosi "<<pobierz()<<endl;
    cout<<"zmienna C wynosi "<<pobierz()<<endl;
    return 0;
}
 
int pobierz()
{
    int liczba;
    cin>>liczba;
    if (liczba<=0) pobierz();
    return liczba;
}

To powinno załatwić sprawę 

0 głosów
odpowiedź 17 stycznia 2021 przez VBService Ekspert (253,340 p.)
edycja 17 stycznia 2021 przez VBService

cout można w pewnym sensie potraktować jako funkcję (bardzo uproszczona definicja), na potrzebę tego wpisu (tak naprawdę jest w C ++ obiektem klasy ostream, jest zdefiniowany w pliku nagłówkowym <iostream>.), mowa jest tu o "zagnieżdżaniu" parametrów i kolejności ich wykonywania. (w tym przypadku parametrem jest kolejna funkcja)

PSEUDOKOD

cout<<"zmienna A wynosi "<<pobierz()<<endl; --> cout(pobierz())

function cout(int x) {
    cout<<"zmienna A wynosi "<<x<<endl;
}

int pobierz()
{
    int liczba;
    while(1)
    {
        cout<<"Podaj liczbe wieksza od 0 ";
        cin>>liczba;
        if (liczba>0)return liczba;
    }
}

 

 

 

W Twoim kodzie nie ma zmiennej B (b) C (c) jest tylko wartość zwrócona z funkcji pobierz();

    int a;
    a=pobierz();
    cout<<"zmienna A wynosi "<<a<<endl;
    cout<<"zmienna B wynosi "<<pobierz()<<endl;
    cout<<"zmienna C wynosi "<<pobierz()<<endl;

 

    cout<<"Podaj liczbe wieksza od 0"<<endl;
    int a, b, c;
    a = pobierz();
    cout<<"zmienna A wynosi "<<a<<endl;
    b = pobierz();
    cout<<"zmienna B wynosi "<<b<<endl;
    c =  pobierz();
    cout<<"zmienna C wynosi "<<c<<endl;
    cout<<"Podaj liczbe wieksza od 0"<<endl;
    int a, b, c;
    a = pobierz();
    b = pobierz();
    c = pobierz();
    cout<<"zmienna A wynosi "<<a<<endl;
    cout<<"zmienna B wynosi "<<b<<endl;
    cout<<"zmienna C wynosi "<<c<<endl;
    cout<<"Podaj liczbe wieksza od 0"<<endl;
    int a, b, c;
    cin>>a >>b >>c;
    cout<<"zmienna A wynosi "<<a<<endl;
    cout<<"zmienna B wynosi "<<b<<endl;
    cout<<"zmienna C wynosi "<<c<<endl;

1
komentarz 17 stycznia 2021 przez NewEraOfPeace Gaduła (4,790 p.)

cout to globalny obiekt klasy ostream cool

komentarz 17 stycznia 2021 przez VBService Ekspert (253,340 p.)
edycja 17 stycznia 2021 przez VBService

Zgadza się i obiekt cout może być również używany z innymi funkcjami składowymi, takimi jak put(), write() itp. Niektóre z często używanych funkcji składowych to:

  • cout.put(char &ch): Displays the character stored by ch.
  • cout.write(char *str, int n): Displays the first n character reading from str.
  • cout.setf(option): Sets a given option. Commonly used options are left, right, scientific, fixed, etc.
  • cout.unsetf(option): Unsets a given option.
  • cout.precision(int n): Sets the decimal precision to n while displaying floating-point values. Same as cout << setprecision(n).
  • cout.flush()

Podobne pytania

0 głosów
1 odpowiedź 1,205 wizyt
pytanie zadane 19 czerwca 2017 w HTML i CSS przez Krzysiek_34 Mądrala (6,050 p.)
0 głosów
2 odpowiedzi 129 wizyt
pytanie zadane 4 czerwca 2018 w PHP przez kordix Gaduła (3,910 p.)
+1 głos
1 odpowiedź 511 wizyt
pytanie zadane 30 stycznia 2021 w C# przez Macion Nowicjusz (180 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...