Duninho Temat założony przez niniejszego użytkownika |
Quiz[Problem] » 2008-10-02 21:47:31 Ostatnio mam jakieś wątpliwości co do tego czy umiem przeczytane już lekcje, no i jak się okazuje, nie do końca. Piszę sobie dlatego proste programy by utrwalić wiedzę i -w razie znalezienia jakiś braków- uzupełnić ją. #include <iostream> #include <conio.h> #include <string> using namespace std; int main() { int punkty = 0, b, odp; string a; string c; cout << "Odpowiedz na pytania, tak, to jest quiz. Nie, to nie jest sen." << endl; cout << "[1] Stolica Polski: "; getline( cin, a ); odp += 1; if( a == "Warszawa" || a == "warszawa" ) { punkty += 1; } cout << "[2] 46+54=x - podaj x w tym rowaniu. : "; cin >> b; odp += 1; if( b == 100 ) { punkty += 1; } cout << "[3] Monty Python. W ktorym filmie wystepowali rycerze mowiacy 'NI'?" << endl << " (odp. z malych liter i bez polskich znakow): "; getline( cin, c ); odp += 1; if( c == "monty python i swiety graal" ) { punkty += 1; } if( odp == 3 ) { cout << "Laczna ilosc punktow wynosi: " << punkty << endl; getch(); } getch(); return( 0 ); }
No więc mamy prosty kod quizu (nie ukończony więc kilka zmiennych nie ma sensu), problem polega na tym, że odpalony program olewa "getline(cin,c);" i całą resztę kodu i przechodzi od razu do sumowania punktów. Zdaję sobie sprawę, że problem jest łatwy albo jak kto woli banalny ale pomoc by się przydała w tej sprawie (to jest powód dla którego tu piszę jakby nie patrzyć) :). |
|
DejaVu |
» 2008-10-02 21:53:18 A jaką wartość wprowadzasz w odpowiedzi b? /edit: Poprawiony kod: #include <iostream> #include <conio.h> #include <string> using namespace std; int main() { int punkty = 0, b, odp = 0; string a; string c; cout << "Odpowiedz na pytania, tak, to jest quiz. Nie, to nie jest sen." << endl; cout << "[1] Stolica Polski: "; getline( cin, a ); odp += 1; if( a == "Warszawa" || a == "warszawa" ) { punkty += 1; } cout << "[2] 46+54=x - podaj x w tym rowaniu. : "; cin >> b; cin.sync(); odp += 1; if( b == 100 ) { punkty += 1; } cout << "[3] Monty Python. W ktorym filmie wystepowali rycerze mowiacy 'NI'?" << endl << " (odp. z malych liter i bez polskich znakow): "; getline( cin, c ); odp += 1; if( c == "monty python i swiety graal" ) { punkty += 1; } cout << "Laczna ilosc punktow wynosi: " << punkty << endl; getch(); return( 0 ); }
|
|
Duninho Temat założony przez niniejszego użytkownika |
» 2008-10-02 22:45:01 Byłbym wdzięczny jeszcze za wyjaśnienie w jakiej sytuacji i czemu trzeba czyścić bufor cina. Lubię wiedzieć co piszę ;) |
|
DejaVu |
» 2008-10-02 22:52:29 Bufor czyścisz wtedy, gdy nie chcesz mieć 'śmieci' ze strumienia wczytując nowe dane. W Twoim przykładzie gdy wczytywałeś liczbę, polecenie cin>>b; wczytało Ci liczbę, a w buforze został znak nowej linii (enter). W związku z tym kolejny wiersz getline(cin,c); wziął wszystkie pozostałe dane w buforze i napotkał w nim znak nowego wiersza, co dla niego oznaczało, że wiersz został już wczytany. /edit: Przykładowo: int liczba; cin >> liczba; string tekst; getline( cin, tekst ); cout << "tekst = \"" << tekst << "\"" << endl;
Jeśli podczas podawania liczby wpiszesz: 123 aaa bbb ccc koniec wiersza to w strumieniu cin pozostaną wszystkie dane, które występują po liczbie. Jeśli chcesz ich się pozbyć czyścisz bufor wywołując metodę cin.sync();. |
|
Duninho Temat założony przez niniejszego użytkownika |
» 2008-10-03 08:10:27 Hmm, jeszcze tylko jedna sprawa i już wszystko z tego tematu będzie wyjaśnione. Jak zrobić by podczas sprawdzania wartości string przez if nie brał pod uwagę wielkości liter. Chodzi o to by odpowiedzi typy "WaRSzawA" były tak samo poprawne jak "Warszawa" czy "warszawa". |
|
DejaVu |
» 2008-10-03 10:54:31 Jest funkcja int tolower(int znak); która zamienia duże litery na małe litery. Możesz w związku z tym po wczytaniu tekstu przejść po jego wszystkich znakach pętlą i zastąpić duże małymi. Tu jest manual: http://www.cppreference.com/wiki/c/string/tolowerZakładaj nowe tematy, ponieważ ten jest defacto offtopic'em i żaden użytkownik nie będzie szukał odpowiedzi w tym temacie jak ignorować wielkość znaków. |
|
« 1 » |