alvarium 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. |
|
pekfos |
» 2020-06-25 13:33:28 |
|
alvarium 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ę |
|
latajacaryba |
» 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: 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. char znak = '5';
int cyfra = znak - 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.
|
|
|
alvarium 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ę. : ) |
|
alvarium 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. |
|
jankowalski25 |
» 2020-06-30 16:30:01 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 ... while | Rozdział 15. Omówienie pojęcia czym jest pętla, podkreślenie jej znaczenia oraz omówienie pętli do ... while. (lekcja) |
---|
Pętla for | Rozdział 22. Omówienie pętli for . (lekcja) |
---|
Pętla while | Rozdział 31. Omówienie pętli while . (lekcja) |
---|
W sensie, że nie wiesz, jak działa Instrukcja warunkowa if ... else? |
|
alvarium 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; }
|
|
« 1 » 2 |