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

Jak sprawdzić że wprowadzona zmienna nie jest liczbą?

Ostatnio zmodyfikowano 2010-03-15 13:02
Autor Wiadomość
Elaine
» 2010-03-14 23:46:08
Powiedzmy, że tak.
P-15051
marek
Temat założony przez niniejszego użytkownika
» 2010-03-15 09:45:41
Dzięki dla pekfosa i Iname.
Program pekfos-a skomplikowany, ale działa na 100%.
Program Iname prosty, ale działa na 99%. np. "23vf45" przyjął jako liczbę 23.

P-15053
Elaine
» 2010-03-15 11:39:10
Trochę mi się nudziło, więc stworzyłem takiego potworka, którego można użyć do wczytywania dowolnego badziewia ze strumienia. Jak działa, to chyba się można domyśleć ;)
C/C++
//! @brief Read anything from a stream.
//!
//! This functions tries to read formatted data from input stream.
//! If data is read successfully (i.e. stream is still good), but
//! next character isn't whitespace, then we treat this as a failure.
//! When reading fails (but not because of EOF), the stream state and
//! buffer are cleared.
//!
//! @param istr Stream to read from.
//! @param result Variable to read to.
//!
//! @return @c true if reading succeeded, @c false otherwise.
template < typename T, typename CharT, typename Traits >
bool read( std::basic_istream < CharT, Traits >& istr, T & result )
{
    using namespace std;
   
    istr >> result;
    if( istr.good() )
    { // stream has still goodbit set, check whether next character is white.
        const ctype < CharT >& ctype_facet = use_facet < ctype < CharT > >( istr.getloc() );
        if( ctype_facet.is( ctype < CharT >::space, Traits::to_char_type( istr.peek() ) ) )
        { // it is, so everything is okay.
            return true;
        }
    }
    else if( istr.eof() )
    { // we reached end of file, don't clear state nor buffer.
        return false;
    }
    // reading failed or next character isn't white, clear stream state and buffer
    istr.clear();
    istr.sync();
    return false;
}
I, tradycyjnie, przykład użycia:
C/C++
#include <iostream>
#include <locale>
using namespace std;

// tutaj ta funkcja

int main()
{
    while( cin.good() )
    {
        int x;
        if( read( cin, x ) )
        {
            cout << "liczba to: " << x << '\n';
        }
        else
        {
            cout << "dupa blada!\n";
        }
    }
}
P-15055
marek
Temat założony przez niniejszego użytkownika
» 2010-03-15 13:02:04
Działa.Reaguje nawet na liczbę typu float! Próbuję rozgryźć, ale za cienki jestem. Dzięki Iname.
P-15056
1 « 2 »
Poprzednia strona Strona 2 z 2