[C++] Program quiz

pknagato2
Użytkownik
Użytkownik
Posty: 32
Rejestracja: 7 lut 2013, o 16:49
Płeć: Mężczyzna
Lokalizacja: Gostyń
Podziękował: 8 razy

[C++] Program quiz

Post autor: pknagato2 »

Witam, czytam synfonię c++ i po każdej nowej rzeczy staram się używać nowej wiedzy w programie, toteż napisałem prosty program:

Kod: Zaznacz cały

#include <iostream>
int main()
{
    int pyt1,pyt2,pyt3,pyt4;
    int punkty=0;
    
    std::cout << "Pytanie pierwsze: Jakimi znakami rozpoczyna i konczy się funkcja main? \n 1. {}\n 2. []\n 3. ()\n 4. /\ \n";
    std::cin >> pyt1;
    
    if(pyt1>1)
    {std::cout << "Udzielono zlej odpowiedzi. \n"; }
    else
    {std::cout << "Udzielono dobrej odpowiedzi.\n ";
               punkty=punkty+1;}
               
    std::cout << "Jaka gra ma skrot 'LOL'? \n 1: Loan of Lobby \n 2: League of Legends \n 3: Laur obiektywnego Lorniego \n 4: Lego obcego Ludzia \n"; 
    std::cin >> pyt2;
    
    if(pyt2=2)
    {std::cout << "Udzielono dobrej odpowiedzi. \n ";
               punkty=punkty+1;}
    else
    {std::cout << "Udzielono zlej odpowiedzi. \n"; }
    
    std::cout << "Uczen uzyskal " << punkty << " punktow. \n" ;
    system("pause");
}
    
jednakże program przy drugiej pętli zawsze pokazuje dobrą odpowiedź nawet jeśle zmienna pyt2 nie jest równa 2, czy mógłby mi ktoś wytłumaczyć dlaczego ?
Pozdrawiam, PkNagato2
Ostatnio zmieniony 5 mar 2013, o 18:48 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
pretorianin
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 26 lut 2013, o 17:28
Płeć: Mężczyzna
Lokalizacja: Prowincja

[C++] Program quiz

Post autor: pretorianin »

Problem leży tutaj:

Kod: Zaznacz cały

if(pyt2=2) {kod}
Otóż znak = w c++ oznacza przypisanie wartości do zmiennej. Tak więc komputer rozbija tą instrukcję na:

Kod: Zaznacz cały

pyt2=2;
if (pyt2) {kod}
A ponieważ 2 jest różne od 0, to if zawsze zwróci prawdę.
Poprawnym zapisem będzie:

Kod: Zaznacz cały

if (pyt2==2) {kod}
Zwróć uwagę na podwójny znak równości, który w c++ jest operatorem służącym do porównywania zmiennych.
pknagato2
Użytkownik
Użytkownik
Posty: 32
Rejestracja: 7 lut 2013, o 16:49
Płeć: Mężczyzna
Lokalizacja: Gostyń
Podziękował: 8 razy

[C++] Program quiz

Post autor: pknagato2 »

dzięki bardzo za odpowiedź..
Jeśli mogę jeszcze jedno pytanie, jaką bibliotekę muszę załadować aby używać "^" znaku potęgi ?
Ostatnio zmieniony 5 mar 2013, o 16:09 przez pknagato2, łącznie zmieniany 1 raz.
Awatar użytkownika
Althorion
Użytkownik
Użytkownik
Posty: 4541
Rejestracja: 5 kwie 2009, o 18:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy
Pomógł: 662 razy

[C++] Program quiz

Post autor: Althorion »

Gwoli ścisłości, funkcja main() nie musi być blokowa, poniższy kod też jest w pełni poprawny:

Kod: Zaznacz cały

int main()
    return 0;
choć zdecydowanie nonsensowny.
Awatar użytkownika
kominkowa
Użytkownik
Użytkownik
Posty: 68
Rejestracja: 8 lut 2013, o 14:54
Płeć: Kobieta
Lokalizacja: Poznań, Wlkp
Podziękował: 2 razy
Pomógł: 14 razy

[C++] Program quiz

Post autor: kominkowa »

pknagato2 pisze: Jeśli mogę jeszcze jedno pytanie, jaką bibliotekę muszę załadować aby używać "^" znaku potęgi ?
do potęgowania biblioteka cmath, funkcja pow o ile dobrze pamiętam
Awatar użytkownika
Althorion
Użytkownik
Użytkownik
Posty: 4541
Rejestracja: 5 kwie 2009, o 18:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy
Pomógł: 662 razy

[C++] Program quiz

Post autor: Althorion »

Ale sama biblioteka doda właśnie tylko funkcję do potęgowania, by mieć możliwość używania ^ jako operatora potęgowania musisz go najpierw samemu przeciążyć.

Ale BARDZO nie chcesz tego zrobić. Przede wszystkim dlatego, że to nieczytelne. Po drugie dlatego, że musisz stworzyć własny typ (nie można przeciążać operatorów pracujących tylko na wbudowanych typach). Po trzecie ^, odpowiadający standardowo za różnicę bitową, jest lewostronnie łączny i ma niski priorytet, podczas gdy potęgowanie powinno mieć bardzo wysoki priorytet i łączyć prawostronnie.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++] Program quiz

Post autor: Afish »

Althorion pisze:Gwoli ścisłości, funkcja main() nie musi być blokowa, poniższy kod też jest w pełni poprawny:

Kod: Zaznacz cały

int main()
    return 0;
choć zdecydowanie nonsensowny.
A skąd te informacje? Bo

oraz punkt 3.6.1 standardu nie zgadzają się z tym.
Awatar użytkownika
Althorion
Użytkownik
Użytkownik
Posty: 4541
Rejestracja: 5 kwie 2009, o 18:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy
Pomógł: 662 razy

[C++] Program quiz

Post autor: Althorion »

Z wykładów, a przyjąłem bezkrytycznie i nie sprawdziłem. Faktycznie, masz rację.
ODPOWIEDZ