Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Problem] Prosty problem z pętla w zadaniu z kursu


Rekomendowane odpowiedzi

Opublikowano

Siemanko, mam problem, chce zrobić zadanie z kursu z cpp0x , program ma zapisywać do zmiennej liczbe od 1 do 1000 , i jeśli źle trafi, wypisywać na ekranie o tym czy liczba jest za mała , czy za duża.

Program raz pobiera liczbe a ma pobierać póki nie bedzie taka sama jak zmienna kod , główkuje i niewygłówkowałem :D

Ide myśleć dalej :>

http://pastebin.com/KNEAyhx6

kod, krótki,i z błedami, ALE KRÓTKI :D

Prosze o pomoc :D

Opublikowano

Błędy:

1. Najważniejszy błąd to main nie zwracający wartości, dopisz przed ostatnią klamrą return 0;.

2. Pętla do..while sprawdza w warunku zmienną "n". Zmienna n jest deklarowana w pętli, nie można więc jej użyć poza pętlą.

3. Pętla while ma źle skonstruowany warunek, z pętli while wychodzi się gdy warunek jest nieprawdziwy (kiedy zwraca false) tak więc czysto teoretycznie komputer wylosował 500. Strzał użytkownika to było 666. Pętla sprawdzi czy 666 jest równe 500. Nie jest więc zwróci wartość false więc opuścisz pętle :)

4. Twój if zakłada że podajesz wartość albo za dużą albo zbyt małą tak więc jedna z etykiet (w Twoim programie "za mało") wypisze się nawet wtedy kiedy trafisz.

5. Nie mam pojęcia co chciałeś osiągnąć tym:

double av = 0.0;
(...)
if ( n != av )
{
       std::cout << "blad" << std::endl;
}

ale zawsze wypisze błąd bo zmienna "n" jest integerem więc nie można do niej zapisać 0.0.

 

Jak poprawisz błędy będzie wszystko pięknie śmigać ;p

 

Jeszcze podpowiedź żeby wszystko było już jasne:

musisz użyć dwóch instrukcji warunkowych, jedna dla przypadku kiedy podana wartość jest większa od szukanej i jedna kiedy wartość jest mniejsza od szukanej. Opcja kiedy podana wartość = szukana wartość może być zwykłym std::cout << "dobrze"; za pętlą while.

Opublikowano

Błędy:

1. Najważniejszy błąd to main nie zwracający wartości, dopisz przed ostatnią klamrą return 0;.

 

To nie jest żaden błąd. Większość kompilatorów sama już na końcu dodaje sobie return 0; więc to nie jest tak niezbędne.


Pomagam w projektach dotyczących programowania (C++/C/Java/C#/inne). Jak masz jakiś problem, napisz do mnie, wspólnie poszukamy rozwiązania ;).

Opublikowano

co do piątki.

losują się liczby int.

jeśli poda się do zmiennej int (n) , zmienną typu double

ma wypisywać błąd

o to mniej wiecej :D

Opublikowano

To nie jest żaden błąd. Większość kompilatorów sama już na końcu dodaje sobie return 0; więc to nie jest tak niezbędne.

Hmm.. no teraz sprawdziłem i rzeczywiście masz racje ms visual '12 nie krzyczy na to. Moim zdaniem jeżeli jest

int main();
{
    (...)
} 

to o zwróceniu jakiegoś int'a powinno się pamiętać :>

 

co do piątki.

losują się liczby int.

jeśli poda się do zmiennej int (n) , zmienną typu double

ma wypisywać błąd

o to mniej wiecej :D

Hmm.. musisz zrobić to inaczej. W c++ jest coś takiego jak std::cin.fail(); oraz std::cin.good(); zwracają one wartości true lub false (jak booleany :)) więc można zrobić coś takiego przy wczytywaniu w pętli:

 

    bool dobrze;   // zmienna pomocnicza
    do
    {
        std::cin >> a; // podajemy dowolną liczbę
        dobrze=std::cin.fail(); // jeżeli jest niepoprawna zmienna dobrze przyjmuje wartosc true
        std::cin.clear(); // czyścimy wyjście
        std::cin.sync(); // synchronizujemy wyjście
    } while (dobrze);  // sprawdzamy jaką wartość ma zmienna dobrze, jeżeli przechowuje false to wychodzimy z pętli

Program będzie wymuszał wprowadzenie danych aż zrobimy to poprawnie, więc żadne inne dane nie wejdą w program. A już najlepszym wyjściem jest jakaś prosta funkcja:

float wczytaj() 
{
	float a;
	bool dobrze;
	do
	{
		std::cin >> a;
		dobrze=std::cin.fail();
		std::cin.clear();
		std::cin.sync();
	} while (dobrze);
	return a;
}

i później w programie jak chcesz sobie wczytać zmienną "xyz" nie bawisz się w std::cin >> xyz; tylko piszesz xyz=wczytaj(); i nie musisz w koło tej pętli przepisywać.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...