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 z pętlą. [poczatkujacy]


Gość

Rekomendowane odpowiedzi

Opublikowano

Witam, rozpoczynam naukę z c++. Uczę się z portalu cppox.

Czy mógłby mi ktoś wytłumaczyć dlaczego w tym kodzie jeżeli wpiszę liczbę od 1 do 4 to pętla się kończy a gdy wpiszę 5 to nadal trwa.

 

 

 

#include <iostream>

int main()
{
    int pierwsza;
    int druga;
    int wybor;

    std::cout << "Podaj pierwsza liczbe" << std::endl;
    std::cin >> pierwsza;
    std::cin.clear();
    std::cin.sync();

    std::cout << "Podaj druga liczbe" << std::endl;
    std::cin >> druga;
    std::cin.clear();
    std::cin.sync();
    std::cout << std::endl;

    std::cout << "=== MENU WYBORU===" << std::endl;
    std::cout << "[1] Dodac " << std::endl;
    std::cout << "[2] Odjac " << std::endl;
    std::cout << "[3] Mnozyc " <<std::endl;
    std::cout << "[4] Dzielic " << std::endl;
    std::cout << "[5] Rezygnuje" << std::endl;
    std::cout << "==================" << std::endl;

    do
    {
    std::cout << "Co mam zrobic? " << std::endl;
    std::cin >> wybor;
    std::cin.clear();
    std::cin.sync();

    if ( wybor >= 1 && wybor <= 5 && pierwsza != 0 && druga != 0)
    switch ( wybor )
    {
        case 1:
        std::cout << "Wynik dodawania: " << pierwsza + druga << std::endl;
        break;

        case 2:
        std::cout << "Wynik odejmowania: " << pierwsza - druga << std::endl;
        break;

        case 3:
        std::cout << "Wynik mnozenia: " << pierwsza * druga << std::endl;
        break;

        case 4:
        std::cout << "Wynik dzielenia: " << pierwsza / druga << std::endl;
        break;

        default:
            std::cout << "Zrezygnowales" << std::endl;
        break;
    }
    }
    while ( wybor == 5 );
    return 0;

}
 

 

 

Znalazłem rozwiązanie na to że trzeba zanegować wybór przy while. czyli byłoby while ( wybor != 5 ).

Tylko dlaczego tak się dzieje? Według mnie logicznie byłoby gdyby nie trzeba było negować tej wartości. Czy mam jakiś błąd w swoim rozumowaniu?

Opublikowano

while ( wybor == 5 );

chodzi tu o to, ze ta petla trwa dopóki warunek w tym wyrażeniu jest prawdziwy, jeśli dasz inna liczbe niz 5 to ona się skonczy 

#include <iostream>

int main()
{
    int pierwsza;
    int druga;
    int wybor;

    std::cout << "Podaj pierwsza liczbe" << std::endl;
    std::cin >> pierwsza;
    std::cin.clear();
    std::cin.sync();

    std::cout << "Podaj druga liczbe" << std::endl;
    std::cin >> druga;
    std::cin.clear();
    std::cin.sync();
    std::cout << std::endl;

    std::cout << "=== MENU WYBORU===" << std::endl;
    std::cout << "[1] Dodac " << std::endl;
    std::cout << "[2] Odjac " << std::endl;
    std::cout << "[3] Mnozyc " <<std::endl;
    std::cout << "[4] Dzielic " << std::endl;
    std::cout << "[5] Rezygnuje" << std::endl;
    std::cout << "==================" << std::endl;

    do
    {
    std::cout << "Co mam zrobic? " << std::endl;
    std::cin >> wybor;
    std::cin.clear();
    std::cin.sync();

    if ( wybor >= 1 && wybor <= 5 && pierwsza != 0 && druga != 0)//tu masz wybor wiec po co ci default w switch?
    switch ( wybor )
    {
        case 1:
        std::cout << "Wynik dodawania: " << pierwsza + druga << std::endl;
        break;

        case 2:
        std::cout << "Wynik odejmowania: " << pierwsza - druga << std::endl;
        break;

        case 3:
        std::cout << "Wynik mnozenia: " << pierwsza * druga << std::endl;
        break;

        case 4:
        std::cout << "Wynik dzielenia: " << pierwsza / druga << std::endl;
        break;

        case 5:
            std::cout << "Zrezygnowales" << std::endl;
        break;
    }
    }
    while ( wybor != 5 ); // zmien na !=5 bo chcesz konczyc 5 program
    return 0;

}
Opublikowano

przetłumacz sobie:

 

rób:

 

std::cout << "Co mam zrobic? " << std::endl;
std::cin >> wybor;
std::cin.clear();
std::cin.sync();

if ( wybor >= 1 && wybor <= 5 && pierwsza != 0 && druga != 0)
switch ( wybor )
{
case 1:
std::cout << "Wynik dodawania: " << pierwsza + druga << std::endl;
break;

case 2:
std::cout << "Wynik odejmowania: " << pierwsza - druga << std::endl;
break;

case 3:
std::cout << "Wynik mnozenia: " << pierwsza * druga << std::endl;
break;

case 4:
std::cout << "Wynik dzielenia: " << pierwsza / druga << std::endl;
break;

default:
std::cout << "Zrezygnowales" << std::endl;
break;
}
}

dopóki wybor się równa 5.

Czyli pętla działa dopóki liczba, którą wpisujesz się równa 5
 

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...