Atrybuty instrukcji if
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Atrybuty instrukcji if

AutorWiadomość
Temat założony przez niniejszego użytkownika
Atrybuty instrukcji if
» 2020-06-25 13:03:10
Witam, mam pytanie dotyczace instrukcji if, chciałem zrobić program który rozróżnia cyfry od znaków i gdy użytkownik wpisze nie cyfre mówi o błędzie ale nie byłem wstanie zaleźć atrybutu pasującego tam. Na początku próbowałem tak: if(x!=int) ale int nie jest atrybutem więc zastanawiałem się czy jest coś takiego czy też muszę dać przedział od (-nieskończoności do nieskończoności), Dziekuje za uwage.
P-177211
» 2020-06-25 13:33:28
P-177212
Temat założony przez niniejszego użytkownika
» 2020-06-25 22:26:45
Dziękuje za odpowiedź ale mój kod nie działa, szukałem tego problemu w internecie ale nie znalazłem żadnej odpowiedzi, prosze o pomoc gdyż jeszczę się z tym zapoznaję.
Tu jest mój kod:
#include <iostream>

using namespace std;
int main()
{
    int liczba1, liczba2;
    char dzialanie;
    if (liczba1 != isdigit);
    cout << "to nie jest liczba";
    cout << "podaj pierwsza liczbe" << endl;
    cin >> liczba1;
    cout << "jakie dzialanie chcesz wykonac(+, -, *, :)" <<endl;
    cin >> dzialanie;
    cout << "podaj druga liczbe" << endl;
    cin >> liczba2;

    switch( dzialanie ) {
    case '+':
        cout << "twoja liczba to " << liczba1+liczba2;
        break;

    case '-':
        cout << "twoja liczba to " << liczba1-liczba2;
        break;

    case '*':
        cout << "twoja liczba to " << liczba1*liczba2;
        break;

    case ':':
        cout << "twoja liczba to " << liczba1/liczba2;
        break;

    default:
        cout << "error";
    }
    system("PAUSE >NUL");
    return 0;
}

Dziękuję
P-177214
» 2020-06-26 02:29:21
isdigit jest funkcją, która zwraca wartość różną od zera, gdy podany argument (czyli to co w nawiasach) jest cyfrą.
Zauważ, że nie wywołujesz tej funkcji w if, nie przekazujesz argumentu.
Powinno to wyglądać mniej więcej tak:
C/C++
char znak;
std::cin >> znak;
if( isdigit( znak ) != 0 )
     std::cout << "cyfra";
else
     std::cout << "znak";


Uprzedzając, nawet jeżeli jest to cyfra, to nie możesz przeprowadzać teraz od razu operacji arytmetycznych, gdyż ta cyfra zapisana jest w zmiennej typu char za pomocą ASCII. Tę cyfrę, jak każdy znak alfanumeryczny, reprezentuje pewna wartość liczbowa, np. dla cyfry 1 jest to 49.
Taki najprostszy chyba sposób to zauważenie, że skoro kolejne cyfry mają kody: dla 0 kod 48, dla 1 - 49, 2 - 50, ... , 9 - 57, to po upewnieniu się, że znak jest cyfrą, po prostu odjąć od niego wartość 48.

C/C++
char znak = '5';
// sprawdzanie, czy 'znak' jest cyfra, jesli jest to:

int cyfra = znak - 48; // przypisujemy kod znaku i odejmujemy wartosc 48

teraz możesz normalnie wykonywać operacje na zmiennej cyfra. Jeśli nie jest to dla Ciebie do końca jasne, poczytaj o tym jak działa char i czym jest ASCII

Tu jeszcze o tym jak ta funkcja działa sama funkcja isdigit:

Function isdigit() takes a single argument in the form of an integer and returns the value of type int.
Even though, isdigit() takes integer as an argument, character is passed to the function. Internally, the character is converted to its ASCII value for the check.
P-177215
Temat założony przez niniejszego użytkownika
Dziękuję za pomoc
» 2020-06-30 00:15:41
Bardzo dziękuję za pomoc, jeśli moge tylko dopytać o 1 rzecz, gdzię mogę znaleźć post albo ewentualnie prosiłbym o dopowiedź o tym jak moge spowodować aby kod po otrzymaniu tej niechcianej zmeinnej powraca do pierwszego pytania o liczbę i co daje ta linja kodu bo nie za bardzo rozumiem
char znak = '5';
// sprawdzanie, czy 'znak' jest cyfra, jesli jest to: ,
 jeszcze raz bardzo dziękuję. : )
P-177236
Temat założony przez niniejszego użytkownika
Kolejny błąd
» 2020-06-30 01:06:25
Zauważyłem iż działania w:
int cyfra = znak - 48;
nie działają, nie wiem czy jest to błąd ale nie jest to tak ważne gdyż jestem w stanie w obliczeniu napisać przy każdej liczbie -48.
Zauważyłem także że gdy wpisze liczbe ujemną lub liczbę dwucyfrową lub większą, to program mówi mi że to znak a nie cyfra, nie jestem pewien dlaczego.
P-177237
» 2020-06-30 16:30:01
int cyfra = znak - 48;
Nie musisz pamiętać ani wpisywać w kodzie numeru każdego znaku.
int cyfra = znak - '0';
 zadziała równie dobrze. Jeśli coś w tej kwestii nie działa, to podaj kod, bo sama taka linijka powinna działać poprawnie.

Natomiast co do liczb ujemnych, to pewnie pierwszym znakiem jest minus, a sam minus jako taki nie jest przecież cyfrą, więc oczywiście
isdigit( '-' )
 daje wartość niezerową. Co do liczb dwucyfrowych, to jeśli wczytujesz
char
, to odczytasz tylko jeden znak. Dlatego łatwiej wczytać
int
, wtedy nie będzie trzeba kombinować z liczbami ujemnymi albo martwić się o to, z ilu cyfr jakaś liczba się składa (oczywiście są górne i dolne limity, ale zwykle są wystarczające do codziennego użytku).

jak moge spowodować aby kod po otrzymaniu tej niechcianej zmeinnej powraca do pierwszego pytania o liczbę
Użyj dowolnej pętli.
Pętla do ... whileRozdział 15. Omówienie pojęcia czym jest pętla, podkreślenie jej znaczenia oraz omówienie pętli do ... while. (lekcja)
Pętla forRozdział 22. Omówienie pętli
for
. (lekcja)
Pętla whileRozdział 31. Omówienie pętli
while
. (lekcja)

i co daje ta linja kodu
W sensie, że nie wiesz, jak działa » Kurs C++ » Poziom 1Instrukcja warunkowa if ... else lekcja?
P-177245
Temat założony przez niniejszego użytkownika
» 2020-06-30 18:34:53
Jak na razie to jest mój kod, nie jestem pewien jak rozwiązać problem niepasującego char do liczb dwucyfrowych i większych, jedyne co mi przychodzi do głowy to zrobienie pentli która zrywa się tylko po otrzymaniu liczby.

#include <iostream>

using namespace std;
char zmienna1 = '5', zmienna2 = '5', dzialanie;
int liczba1 = zmienna1 - 48;
int liczba2 = zmienna2 - 48;
int main()
{
    cout << "podaj pierwsza liczbe" << endl;
    cin >> zmienna1;

    if (isdigit( zmienna1 ) != 0)
        cout <<"ok" << endl;
    else
        cout <<"to nie jest liczba";

    cout << "jakie dzialanie chcesz wykonac(+, -, *, :)" <<endl;
    cin >> dzialanie;
    cout << "podaj druga liczbe" << endl;
    cin >> zmienna2;

    if (isdigit( zmienna2 ) != 0)
        cout << "ok" << endl;
    else
        cout << "to nie jest liczba";

    switch ( dzialanie ) {

    case '+':
        cout << "twoja liczba to " << liczba1+liczba2;
        break;

    case '-':
        cout << "twoja liczba to " << liczba1-liczba2;
        break;

    case '*':
        cout << "twoja liczba to " << liczba1*liczba2;
        break;

    case ':':
        cout << "twoja liczba to " << liczba1/liczba2;
        break;

    default:
        cout << "error";
    }
    system("PAUSE >NUL");

    return 0;
}
P-177247
« 1 » 2
 Strona 1 z 2Następna strona