DetectiveLester Posted June 10, 2011 Report Share Posted June 10, 2011 Siema. Uczę się programować w c++ i miałem zamiar zrobić taką gierkę. Chodzi o to, że aby wygrać trzeba wpisać literę "k" i kiedy się ją wpisze gra mówi ze wygrałeś i takie tam, jednak kiedy wpiszesz inna literę mówi, że to nie to . Tylko że teraz pokazuje mi błąd i nie wiem co źle zrobiłem #include <iostream> #include <cstdlib> int main() { char litera; do{ std::cout << "Zagrajmy w gre. Aby wygrac musisz zgadnac, o ktora litera mi chodzi. Zaczynajmy tu wpisz swoja propozycje:"; std::cin >> litera; if (litera = 'k') std::cout << "\n Gratuluje! Odgadles o jaka litere mi chodzilo!" << "\n"; else if (litera != 'k') std::cout "\n To nie jest ta litera. Sproboj ponownie."; std::cout << "\n Napisales:" << litera << "\n"; }while(litera != 'k'); std::cout << "\n Gratuluje! Odgadles o jaka litere mi chodzilo!" << "\n"; system("pause"); } Co tu źle jest ? Link to comment Share on other sites More sharing options...
CTRL85 Posted June 10, 2011 Report Share Posted June 10, 2011 Poprawiłem troszkę W sumie, to zapomniałeś o "<<" w jednym cout #include <iostream> #include <cstdlib> using namespace std; int main() { char litera = 0; //zawsze definiuj zmienne cout << "Zagrajmy w gre. Aby wygrac musisz zgadnac, o ktora litera mi chodzi. Zaczynajmy tu wpisz swoja propozycje: "; do { cin >> litera; if (litera == 'k') //samo "=" to przypisanie, a "==" to porównanie, chyba że coś pokręciłem, bo też się uczę cout << "\n Gratuluje! Odgadles o jaka litere mi chodzilo!" << "\n"; else if (litera != 'k') cout << "\n To nie jest ta litera. Sproboj ponownie."; cout << "\n Napisales: " << litera << "\n"; } while(litera != 'k'); cout << "\n Gratuluje! Odgadles o jaka litere mi chodzilo!" << "\n"; system("pause"); } Link to comment Share on other sites More sharing options...
DetectiveLester Posted June 10, 2011 Author Report Share Posted June 10, 2011 A takie mam pytanie jeszcze ja tam na początku jest char litera = 0 - to dlaczego tam jest char, a nie np int/double - co to oznacza bo z książki to przepisałem a nie ma tam wyjaśnienia. Link to comment Share on other sites More sharing options...
CTRL85 Posted June 10, 2011 Report Share Posted June 10, 2011 są to typy zmiennych char - jeden znak (liczba lub litera) int - liczba CAŁKOWITA float - liczb DZIESIĘTNA lub CAŁKOWITA string - ciąg znaków bool - prawda(1)/fałsz(0) double się bodajże stosuje do potęg, ale nie wiem do końca , bo nigdy nie używałem PS Jeśli chcesz, to możesz to rozbudować. Zamiast liter daj liczby, zakres, losowanie. Jakbyś potrzebował pomocy - GG 5220630 Mam gotową taką grę, więc wiem o co chodzi i jak z tym Link to comment Share on other sites More sharing options...
[Ekspert] Mormegil Posted June 11, 2011 Report Share Posted June 11, 2011 No trochę z tymi typami nie do końca mogę się zgodzić char - to najmniejszy typ danych, jego rozmiar jest zawsze 1. Innymi słowy 1 == sizeof(char). Pytanie brzmi jak należy tą jedynkę interpretować? Istnieją takie platformy sprzętowe dla, których są to dwa bajty. Na PC jest to jeden bajt danych. Co dość istotne, jest typ liczbowy 0-255. Znaki, w tym litery i cyfry, to nic innego jak liczby. Za przypisanie znakom wartości odpowiedzialna jest tzw strona kodowa. Poczytaj o ASCII i UTF. Jest też wynalazek o nazwie wide char. Powstał z myślą o stosowaniu UTF. short - typ liczb całkowitych nie większy od inta. int - typ liczb całkowitych. Rozmiar inta powinien być równy rozmiarowi słowa maszynowego. Czyli taki optymalny typ danych dla procesora. long - typ liczb całkowitych nie mniejszy od inta. long long - typ liczb całkowitych nie mniejszy od longa. float - liczba ZMIENNOPRZECINKOWA. Broń Boże dziesiętna. Komputery póki co używają binarnej reprezentacji liczb. Oznacza to, że wielu liczb dziesiętnych zwyczajnie nie da się zapisać. double - taki float, tylko dwa razy większy. Typy float i double są u standaryzowane. Ich rozmiar i format zapisu jest stały. long double - zmiennoprzecinkowa nie mniejsza od double. string - takiego typu nie ma Jest klasa std::string. Link to comment Share on other sites More sharing options...
CTRL85 Posted June 11, 2011 Report Share Posted June 11, 2011 Przepraszam za pomylke i dziekuje za poprawe Link to comment Share on other sites More sharing options...
hixohe Posted June 11, 2011 Report Share Posted June 11, 2011 bool - prawda(1)/fałsz(0) bool może przyjmować też inne wartości. 0 jest zawsze fałszem, ale np 2,3,4 itd jest prawdą. Możesz nawet przypisać do zmiennej typu bool 'a'. Link to comment Share on other sites More sharing options...
[Ekspert] Hakken Posted June 11, 2011 Report Share Posted June 11, 2011 wooow, ambitne stwierdzenie. bool przyjmuje tylko i wyłącznie dwie wartości, true i false. Coś takiego: bool x; std::cin>>x; std::cout<<x; nie wypisze literki 'a' jeśli ją podasz EDIT __________________________________ widze co masz na myśli, jednak bool to tylko true lub false. Jednak prawda jest, ze jesli jako bool podamy np. literke to przyjmie ona wartość true. Link to comment Share on other sites More sharing options...
[Ekspert] Mormegil Posted June 12, 2011 Report Share Posted June 12, 2011 bool może zostać zrealizowany w różny sposób. O ile się dobrze orientuję Visual Studio używa na boola jeden bajt. Czyli teoretycznie dałoby się w nim zapisać wartości inne niż 0 i 1. Kompilator może jednak wymusić wartości 0 i 1. Co oznacza konwersję zakresu 1 - 255 do 1 i nie jest zbyt optymalne. Link to comment Share on other sites More sharing options...
CTRL85 Posted June 12, 2011 Report Share Posted June 12, 2011 Czyli nie wiem, czy dobrze napisałem, czy źle i jakby ktoś raczył wytłumaczyć, jak jest dobrze, to byłbym wdzięczny. Link to comment Share on other sites More sharing options...
[Ekspert] Mormegil Posted June 14, 2011 Report Share Posted June 14, 2011 Czy dobrze napisałeś, ale co? Odnośnie booli? To co napisał Hakken jest zgodne z moją wiedzą na temat booli. Przyjmij, że zmienna bool ma zawsze wartość true lub false, nie wolno jednak zakładać, że true == 1. Nie wiem co dokładnie mówi standard, ale sądzę, że kompilator może sobie tutaj pozwolić na pewną swobodę. Trzeba by to sprawdzić. Link to comment Share on other sites More sharing options...
hixohe Posted June 15, 2011 Report Share Posted June 15, 2011 wooow, ambitne stwierdzenie. bool przyjmuje tylko i wyłącznie dwie wartości, true i false. Może nie wyraziłem się dość jasno. W C++ bool może przyjmować (w sensie otrzymać) dowolną wartość liczbową z tym, że w chwili przyjmowania następuje automatyczna konwersja i przypisana zostaje wartości 1(true) ( w przypadku gdy wartość przyjmowana !0) lub 0(false) (jeśli wartość == 0). Możemy więc zrobić coś takiego: bool a = 'a' ; bool b = 123; bool c = -1; bool d = "Hakken"; Wszystkie powyższe zmienne zwrócą po wywołaniu wartość 1. Link to comment Share on other sites More sharing options...
[Ekspert] Hakken Posted June 15, 2011 Report Share Posted June 15, 2011 z tego co wiem, to w przypadku bool-a true dowmylnie == 1 (chyba ze zrobi #define true 0 , ale to inna bajka) Link to comment Share on other sites More sharing options...