Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

DetectiveLester

Gdzie zrobiłem błąd

Polecane posty

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 do komentarza
Udostępnij na innych stronach

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 do komentarza
Udostępnij na innych stronach

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 do komentarza
Udostępnij na innych stronach

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 do komentarza
Udostępnij na innych stronach

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 do komentarza
Udostępnij na innych stronach

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 do komentarza
Udostępnij na innych stronach

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 do komentarza
Udostępnij na innych stronach

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 do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...