Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wyświetlanie int z zerami

Ostatnio zmodyfikowano 2015-04-06 17:56
Autor Wiadomość
Glazus
» 2015-04-04 11:39:39
Ale wtedy "uszytkownik" będzie mógł wpisać "blablaktotoczytatentrąba" i ci wyświetli to samo...
Chyba że sprawdzisz, czy wprowadzana dana jest poprawna.

C/C++
while( cin >> tmp )
{
    bool ok = true;
    for( int i = 0; i < tmp.length(); i++ )
    {
        if( !( tmp[ i ] > 47 && tmp[ i ] < 58 ) )
        {
            ok = false;
            break;
        }
    }
    if( ok )
         break;
   
}
P-130078
Brunon3
» 2015-04-04 11:43:09
@up: A nie lepiej najpierw wczytywać liczbę do
int
 i sprawdzać czy jest prawidłowa przez
cin.good() /*lub*/ cin.fail()
, a następnie kopiować tego
int
'a do
std::string
 i na nim operować? Wbrew pozorom mniej kodu.

-BD.
P-130079
Glazus
» 2015-04-04 12:03:00
Autor chce, by po wpisaniu przez użytkownika
00001
 zmienna przechowywała
00001
, a po wpisaniu
001
 przechowywała
001
.
W jaki sposób chcesz to zapewnić przyjmując inta?
P-130083
Brunon3
» 2015-04-04 12:06:07
@up: Do int'a w "czystej" postaci czyli "1". Następnie za pomocą cin.good() sprawdzam czy to na pewno liczba, a potem kopiuję do string'a i wykonuję dalsze operacje (zera na początku). Ilość zer które dał użytkownik mogą być przechowywane w osobnym int'cie...

Chociaż po namyśle Twój pomysł może się okazać lepszy. :)

-BD.
P-130084
michal11
» 2015-04-04 13:24:21
Jak chcesz sprawdzać ile zer wpisał użytkownik jeżeli wczytujesz je do inta ?
P-130098
Brunon3
» 2015-04-04 13:25:50
No właśnie... Trzeba by było wczytywać do string'a a następnie kopiować do następnego i jeszcze liczyć zera... Nie, naprawdę, Twój sposób jest lepszy. ;) Sorry za offtop.

-BD.
P-130099
C-Objective
» 2015-04-04 13:38:48
Hmm... Tak się trochę nad tym nieefektywnym kodem zastanawiam:
Metoda nie zadziała prawidłowo na 10, ale łatwo to naprawić
C/C++
#include <conio.h>
#include <istream>
#include <string>
const string cyfry[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" }; //Może się przyda
int main() {
    std::string liczba;
    std::cin >> liczba;
    for( int i = 0; i > liczba.length(); i++ ) { //System sprawdzania. Wiem że istnieje cin.good() ale wolę robić po swojemu
        if( liczba[ i ] == "0" || liczba[ i ] == "1" || liczba[ i ] == "2" || liczba[ i ] == "3" || liczba[ i ] == "4" || liczba[ i ] == "5" || liczba[ i ] == "6" || liczba[ i ] == "7" || liczba[ i ] == "8" || liczba[ i ] == "9" ) //OK
        else //Błąd, to 'cuś' musi być cyfrą.
    }
    //Int by pociachał 0001 na 1.
    //Teraz system sprawdzania liczby zer.
         int zera = 0;
   
    for( int i2; i2 > liczba.length(); i2++ ) if( liczba[ i ] == "0" ) zera++;
   
    int cyfra = atoi( liczba.c_str() );
    //Cyfra - nasz int. (int)
    //Zera - liczba zer. (int)
    //Nie mam pojęcia, czy się kompiluje...
    return 0;
}
P-130100
michal11
» 2015-04-04 16:01:06
Wywal tego ifa bo oczy bolą. Przede wszystkim masz funkcję isdigit/isalpha, jeżeli nie chcesz z nich skorzystać to lepszym rozwiązaniem będzie użycie twojej globalnej tablicy zamiast pojedyncze sprawdzanie. Reszta wygląda ok

Edit.
Jednak nie ok, ostatni for jest zły. Nie inicjujesz zerem i zła nazwa
P-130117
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona