Skocz do zawartości

Zarchiwizowany

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

vanity

Mały program - problem z funkcją "switch".

Polecane posty

Mam za zadanie:

Stwórz program, który poprosi użytkownika o liczbę całkowitą i przyporządkuje ją do jednego z czterech przedziałów: liczb ujemnych, jednocyfrowych, dwucyfrowych lub pozostałych. Która z instrukcji ? if czy switch ? będzie tu odpowiednia?

Wiem, że będzie tutaj pasowac "switch" poniewaz "if" okresla tylko prawde lub falsz, a w zadaniu mamy az cztery warianty. Jednak cały czas nie moge ustalic wartosci dla "case". Nie mogę przecież pisać dla każdej liczby po kolei odpowiedniego wariantu, ponieważ liczb jest nieskonczenie wiele. Dlatego probuje ustalic wartosc dla "case(fLiczba < 0)" (zeby wyswietlal sie napis, ze jest ujemna). Jednak program nie chce takiej wartosci dla niego przyjac. Jak to zrobic?

Oto kawalek "void main()" ktory zdazylem wklepac:

int nLiczba;
    std::cout << "Jest to program przyporzadkowujacy rodzaj liczb." << std::endl;
    std::cout << "Podaj swoja liczbe: ";
    std::cin >> nLiczba;
    std::cout << "Twoja liczba jest liczba: " << nLiczba;


    switch(nLiczba)
    {
    case (nLiczba < 0):

P.S. Wiem na pewno, że nie moze byc switch(nLiczba), lecz nie mam pojecia jak ten problem inaczej rozwiazac.

Link do komentarza
Udostępnij na innych stronach

Trzeba to zrobić na if-else.

Case może przyjmować stałe wartości, nie dasz rady tutaj się nim posłużyć (instrukcja switch jest dobra do zrobienia np menu, jeśli naciśniesz 1 to coś tam, jeśli 2 to coś tam itd).

Najpierw wczytujesz sobie liczbę tak jak to robiłeś. Potem masz kilka instrukcji if-else:

if(nLiczba < 0)
     cout<<"Liczba ujemna"<<endl;


else if (nLiczba > -10 || nLiczba <10)
{
     cout<<"Liczba jednocyfrowa"<<endl;
}

itd

Link do komentarza
Udostępnij na innych stronach

Teraz inny problem, działa mi tylko wyswietlanie napisow "ujemna" i "jednocyfrowa". Kiedy wpisze dwu, lub trzycyfrowa to jest cały czas napisane, że jest jednocyfrowka.

if(nLiczba < 0)
    {
        std::cout << "ujemna.";
    }

    else if(nLiczba>0 || nLiczba<10)
    {
        std::cout << "jednocyfrowa.";
    }

    else if(nLiczba >= 10 || nLiczba < 100)
    {
        std::cout << "dwucyfrowa.";
    }
    else std::cout << "liczba inna niz przewidywana. :D Sorka." << std::endl;

Link do komentarza
Udostępnij na innych stronach

Spróbuj tak jak poniżej.

if(nLiczba < 0)
        std::cout << "ujemna.";

  else if(nLiczba>0 && nLiczba<10)
        std::cout << "jednocyfrowa.";

  else if(nLiczba >= 10 && nLiczba < 100)
        std::cout << "dwucyfrowa.";
  
   else std::cout << "liczba inna niz przewidywana. :D Sorka." << std::endl;

Link do komentarza
Udostępnij na innych stronach

Zmieniłem operator alternatywy || na operator koniunkcji &&. Czemu ?

else if(nLiczba>0 || nLiczba<10)
    {
        std::cout << "jednocyfrowa.";
    }

Zapis ten oznaczał, że jeśli podana liczba jest większa od zera (czyli wliczają się liczb 0,1...,10,11...,100,101...) lub jest mniejsza od 10 (czyli wliczają się liczby ujemne ...,-2,-1). wypisz jednocyfrowa. Jeśli liczba była ujemna program wypisywał ujemna, ponieważ tak miał podane w pierwszym if'ie. Gdy liczba była większa od zera, czyli również dwucyfrowe wpisywały się w tę wartość zostawało wyświetlone jednocyfrowa gdyż warunek był spełniony (aby alternatywa nie była spełniona oba porównywane wyrażenia muszą być fałszywe, u ciebie jedno było prawdziwe, dlatego dalsza część warunku już nie była sprawdzana (najpierw sprawdzany jest warunek po lewej stronie operatora ||).

@Hakken mnie ubiegł ;).

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...