Niepoprawne działanie funkcji warunkowej IF

0

W trakcie ćwiczeń z instrukcjami warunkowymi stworzyłem taki oto programik:

// Ćwiczenia z wykorzystaniem zdobytych informacji o IF, SWITCH i FOR

#include <iostream>
#include <conio.h>

int main()
{
    int nCalkowita;
    std::cout << "Prosze podac dowolna liczbe calkowita: ";
    std::cin >> nCalkowita;
    
    if (nCalkowita < 0) std::cout << "To jest liczba ujemna.";
    if (0 < nCalkowita < 10) std::cout << "To jest liczba jednocyfrowa";
    if (10 < nCalkowita < 100) std::cout << "To jest liczba dwucyfrowa";
    
    getch();
}

a kiedy go skompiluję i uruchomię, a potem wpiszę dowolną liczbę, zawsze wyskakują mi 3 dostępne warianty.

user image

co jest nie tak?

0
#include <iostream>
#include <conio.h>
 
int main()
{
    int nCalkowita;
    std::cout << "Prosze podac dowolna liczbe calkowita: ";
    std::cin >> nCalkowita;
 
    if (nCalkowita < 0) std::cout << "To jest liczba ujemna.";
    if (0 < nCalkowita && nCalkowita < 10) std::cout << "To jest liczba jednocyfrowa";
    if (10 < nCalkowita && nCalkowita< 100) std::cout << "To jest liczba dwucyfrowa";
 
    getch();  // inaczej _getch();
}
}

Po 1. Poczytaj jeszcze o ifa'ch bo nie ma czegoś takiego jak if (0 < nCalkowita < 10) zamiast tego stosujesz && (w tym przypadku)
Po 2. zapoznaj się z using namespace std to Ci ułatwi troszkę zapis ; )
Po 3. Spróbuj wpisać '0' w swoim programie :)

!@@!Edit : Masz 'na Twoim poziomie'. Używasz Dev-Cpp ?

0

Cóż dolnej połowy kodu raczej nie zrozumiałem, no wiecie - przeczytałem dopiero 20% poradnika o C++ taka struktura kodu w ogóle nic mi nie mówi. Można byłoby to zrobić na MOIM poziomie?

0

To jest na TWOIM poziomie. Czego tutaj nie rozumiesz?...

Operator && to logiczny operator AND, 0 < nCalkowita && nCalkowita < 10 znaczy 0 < nCalkowita ORAZ nCalkowita < 10...

0

Okej, wyjaśnione.
A to:

std::cin.sync();
        std::cin.get();

bo z getchem mi nie działa

0
#include <iostream>
#include <conio.h>

     using namespace std;
int main()
{
    int nCalkowita;
    std::cout << "Prosze podac dowolna liczbe calkowita: ";
    std::cin >> nCalkowita;
 
    if (nCalkowita < 0)
           cout << "To jest liczba ujemna." << endl;
    else if (0 <= nCalkowita && nCalkowita < 10)
           cout << "liczba jednocyfrowa" << endl;
    else if((nCalkowita >= 10) && (nCalkowita < 100))
           cout << "Liczba dwucyfrowa" << endl;
 
    getch();  // inaczej _getch();
}
}
0

Nie znam zbyt dobrze C++. Zakładam, że istnieje funkcja abs() zwracająca wartość bezwzględną.

#include <iostream>
#include <conio.h>
 
     using namespace std;
int main()
{
    int nCalkowita;
    std::cout << "Prosze podac dowolna liczbe calkowita: ";
    std::cin >> nCalkowita;
 
    if (nCalkowita < 0)
           cout << "To jest liczba ujemna." << endl;
    if (0 <= abs(nCalkowita) && (abs(nCalkowita)) < 10)
           cout << "liczba jednocyfrowa" << endl;
    else if((abs(nCalkowita) >= 10) && (abs(nCalkowita) < 100))
           cout << "Liczba dwucyfrowa" << endl;
 
    getch();  // inaczej _getch();
}
}
0

Jest taka funkcja, znajduje się chyba w bibliotece <math.h>.

Odnośnie tematu, nie ma czegoś takiego jak "funkcja warunkowa IF", to jest "instrukcja warunkowa IF".

0

std::cin.sync();
std::cin.get();

cin.sync() sprawia że jeśli pozostały jeszcze w strumieniu wejścia jakieś znaki to zostaną one pominięte - dzięki temu cin.get() czeka na nowy, podany przez użytkownika znak zamiast pobrać któryś z niewykorzystanych znaków.

0
Tobruk napisał(a)

if (0 < nCalkowita < 10)

skąd ty to w ogóle wziąłeś?

1 użytkowników online, w tym zalogowanych: 0, gości: 1