Egzekutor Opublikowano 6 Lipca 2009 Opublikowano 6 Lipca 2009 Witam mam problem. Mam oto taką instrukcję wyboru: int petla; switch(petla) { case 1: cout << " Wybrales 1 \n"; break; case 2: cout << " Wybrales 2 \n"; break; case 3: cout << " Wybrales 3 \n"; break; } No i wydaje mi się, że wszystko jest w porządku a jednak jeżeli kompiluje program on po prostu nie zwraca uwagi na tę pętlę i przechodzi do następnych czynności. Co jest w tej pętli nie tak?
Boro Casso Opublikowano 6 Lipca 2009 Opublikowano 6 Lipca 2009 int petla; cin>>petla; switch(petla) { case 1: cout << " Wybrales 1 \n"; break; case 2: cout << " Wybrales 2 \n"; break; case 3: cout << " Wybrales 3 \n"; break; } btw switch to nie pętla.
Egzekutor Opublikowano 6 Lipca 2009 Autor Opublikowano 6 Lipca 2009 Nadal pomija pętlę lecz teraz sam wybiera losowo "1 , 2 lub 3" Nie wiem co jest grane. Ps. No faktycznie pomyliłem się :P
Administratorzy gnysek Opublikowano 6 Lipca 2009 Administratorzy Opublikowano 6 Lipca 2009 SWITCH TO NIE JEST PĘTLA To jest instrukcja wyboru. Pętla to jest coś, co się powtarza, czyli for, while, do until, repeat
Egzekutor Opublikowano 6 Lipca 2009 Autor Opublikowano 6 Lipca 2009 Wiem, tylko mi się coś zchrzaniło bo myślałem o czym innym jak pisałem posta :P
Boro Casso Opublikowano 6 Lipca 2009 Opublikowano 6 Lipca 2009 int nr = 0; cin >> nr; switch(nr) { case 1: cout << "Wybrałeś 1!\n"; break; case 2: cout << "Wybrałeś 2!\n"; break; } u mnie działa
Egzekutor Opublikowano 6 Lipca 2009 Autor Opublikowano 6 Lipca 2009 Nie wiem dlaczego ale było dlatego źle, że przy definicji obiektu nie podałem wartości int petla; int petla = 0; //Jak tak napisze to jest dobrze . Dzięki za pomoc :D
Platyna Opublikowano 6 Lipca 2009 Opublikowano 6 Lipca 2009 Jak przy definicji nie podasz wartości to zmienna przyjmuje jakąś całkowicie kosmiczną wartość. Tak iwęc nie była równa ani 1, ani 2, ani 3 wiec pomijała switcha. Proste. Jak przypisałeś 0 to też powinna pomijać więc domyślam się że wkleiłeś nam to jakiś okrojony z ważnych rzeczy kod.
Administratorzy gnysek Opublikowano 6 Lipca 2009 Administratorzy Opublikowano 6 Lipca 2009 switch powinien mieć też klauzulę default, bez tego to o kant dupy rozbić całe założenie tej instrukcji.
Filar Społeczności ANtY Opublikowano 6 Lipca 2009 Filar Społeczności Opublikowano 6 Lipca 2009 default wykonuje się, gdy wartość jest inna od uwzględnionych przez ciebie. Platyna nie powinno pomijać jeśli wcześniej jest cin bo chyba wtedy nadaje wartość...
Platyna Opublikowano 6 Lipca 2009 Opublikowano 6 Lipca 2009 cin wczytuje wartość z klawiatury (swoją drogą zwykle lepiej używać scanf) Poza tym ja mówiłem o jego kodzie, a on nie miał tam ani cina, ani nic.
Filar Społeczności ANtY Opublikowano 6 Lipca 2009 Filar Społeczności Opublikowano 6 Lipca 2009 No to akurat racja. Mógłby pokazać cały kod, ale nvm.
progio! Opublikowano 6 Lipca 2009 Opublikowano 6 Lipca 2009 cin wczytuje wartość z klawiatury (swoją drogą zwykle lepiej używać scanf) Jak już chcesz się tak rozdrabniać to cin wczytuje dane ze standardowego strumienia stdin - najczęsciej klawiatura, może to być jednak plik, wyjście innego programu. A scanf jest mało wydajny i nieobiektowy + w cpp powoduje czasem dziwne błędy.
Platyna Opublikowano 6 Lipca 2009 Opublikowano 6 Lipca 2009 Z tego co ja wiem to scanfy i printfy są wydajniejsze od cinów i coutów. I wcale nie chciałem się rozdrabniać. Po prostu tak przy okazji wtrąciłem :P
progio! Opublikowano 6 Lipca 2009 Opublikowano 6 Lipca 2009 Z tego co ja wiem to scanfy i printfy są wydajniejsze od cinów i coutów. I wcale nie chciałem się rozdrabniać. Po prostu tak przy okazji wtrąciłem :P Korzystając z cstdio parametry nie są rozpoznywane od razu (możesz przekazać parametr liczbowy jako tekst, zapomnieć jakiegoś) i musisz sam je podawać - oznacza to że muszą być sprawdzane na etapie WYKONYWANIA programu, za każdym razem od nowa printf musi parsować jego format-string, a to jest po prostu bardzo niewydajne :P Pozatym strumienie łatwiej rozszerzyć, wystarczy przeciążyć operator np. << i możesz już robic std::cout << obiektTwojejklasy; :)
Platyna Opublikowano 6 Lipca 2009 Opublikowano 6 Lipca 2009 No nie wiem. Kilka razy doświadczalnie udowodniłem że printf i scanf są wydajniejsze. Czasami mi zadanka się w czasie nie mieściły, wywłaszczało mi bo używałem cin i cout. A to, że scanf i prontf są dużo wygodniejsze to już jest niepodważalne :)
progio! Opublikowano 6 Lipca 2009 Opublikowano 6 Lipca 2009 Z której strony? Że trzeba pamiętać o %d, %s itp.? Spróbując sobie zrobić klase i printfnąć jej obiekt ;S W strumieniach jak mówiłem wystarczy tylko przeciążyć operator.
progio! Opublikowano 6 Lipca 2009 Opublikowano 6 Lipca 2009 Udowodnij, chyba że mówisz o czasach kiedy biblioteka strumieni była wrapperem cstdio.
Egzekutor Opublikowano 7 Lipca 2009 Autor Opublikowano 7 Lipca 2009 Skoro cin i cout są wolniejsze to dlaczego Grębosz nic nie wspomniał o scanf ?
progio! Opublikowano 7 Lipca 2009 Opublikowano 7 Lipca 2009 Bo printf/scanf jest z C i kiedyś jak standard był wdrażany to strumienie rzeczywiście były wolniejsze, ale teraz - SĄ lepsze.
Platyna Opublikowano 7 Lipca 2009 Opublikowano 7 Lipca 2009 Z tym że scanfy i printfy tyż zostały trochę zoptymalizowane w cstdio. Pisząc chociażby zadania pod OI ważne jest by ich używać bo przez durne cin i couty moze ci nieraz zadanie się wywłaszczyć. A co do wygody: Sory, ale nie wmówisz mi że wygodne jest pisanie durnego << za każdym razem jak chce inną zmienną wypisać. W printfie wszystko cacy piszę w jednym stringu. A jak ci %d i %c problemy sprawiają to tylko brak przyzwyczajenia.
Rekomendowane odpowiedzi