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

Konwersja znaku z pola tekstowego

Ostatnio zmodyfikowano 2012-12-22 20:51
Autor Wiadomość
dzwigar
Temat założony przez niniejszego użytkownika
Konwersja znaku z pola tekstowego
» 2012-12-11 22:54:54
Odważyłem sie zapytac Was szanownych programistów o to
jak mam przekonwertować liczbę zapisaną w polu tekstowym na zmienną double.
Wiem że za pomocą funfcji strtod ale nie mogę sobie poradzić.\
Dodam że znak liczbowy mam zapisany w buforze

C/C++
DWORD length3 = GetWindowTextLength( hText3 );
LPSTR buf3 =( LPSTR ) GlobalAlloc( GPTR, length );
GetWindowText( hText3, buf3, length + 1 );

Chciałbym wykonać na tych zmiennych działania matematyczne.
Nie proszę o rozwiązanie bezpośrednie ale choćby jakiś przykład.
P-70807
DejaVu
» 2012-12-11 23:21:26
P-70811
dzwigar
Temat założony przez niniejszego użytkownika
» 2012-12-21 22:17:11
Wracając do tematu,

Nie zabardzo wiem jak się uporać z tą konwersją
C/C++
void wynik()
{
   
    DWORD length = GetWindowTextLength( hText );
    LPSTR buf =( LPSTR ) GlobalAlloc( GPTR, length );
    GetWindowText( hText, buf, length + 1 );
   
    double atof( const char * buf );
   
    DWORD length1 = GetWindowTextLength( hText1 );
    LPSTR buf1 =( LPSTR ) GlobalAlloc( GPTR, length );
    GetWindowText( hText1, buf1, length + 1 );
   
    double atof( const char * buf1 );
   
    DWORD length2 = GetWindowTextLength( hText2 );
    LPSTR buf2 =( LPSTR ) GlobalAlloc( GPTR, length );
    GetWindowText( hText2, buf2, length + 1 );
   
    double atof( const char * buf2 );
   
    DWORD length3 = GetWindowTextLength( hText3 );
    LPSTR buf3 =( LPSTR ) GlobalAlloc( GPTR, length );
    GetWindowText( hText3, buf3, length + 3 );
   
    double atof( const char * buf3 );

i teraz moje pytanie jak mam dodać dwie liczby?
tak

double a;
a = (buf + buf1);

i teraz wynik chciałbym wysłać do pola hText7

SetWindowText( hText7, a);

Wiem że muszę spowrotem przekonwertować zmienną double a do stringa.

Proszę o pomoc.

Uff udało mi sie zdążyć przed krytyką, to forum działa na mnie jak straszak który nakazuje

pierw szukać , szukać i czytać ze zrozumieniem a potem zadawać pytania.

oto moje wypociny:

C/C++
void wynik()
{
   
   
   
    DWORD length = GetWindowTextLength( hText );
    LPSTR buf =( LPSTR ) GlobalAlloc( GPTR, length );
    GetWindowText( hText, buf, length + 1 );
    //SetWindowText( hText4, buf );
   
   
    DWORD length1 = GetWindowTextLength( hText1 );
    LPSTR buf1 =( LPSTR ) GlobalAlloc( GPTR, length );
    GetWindowText( hText1, buf1, length + 1 );
    //SetWindowText( hText5, buf1 );
   
   
    DWORD length2 = GetWindowTextLength( hText2 );
    LPSTR buf2 =( LPSTR ) GlobalAlloc( GPTR, length );
    GetWindowText( hText2, buf2, length + 1 );
    //SetWindowText( hText6, buf2 );
   
   
    DWORD length3 = GetWindowTextLength( hText3 );
    LPSTR buf3 =( LPSTR ) GlobalAlloc( GPTR, length );
    GetWindowText( hText3, buf3, length + 3 );
    //SetWindowText( hText7, buf2 );
   
    double a, b, c, d, e;
    double wynik;
    a = atof( buf );
    b = atof( buf1 );
    c = atof( buf2 );
    d = atof( buf3 );
    wynik =( d + c );
    char Cstr[ 20 ];
    gcvt( wynik, 7, Cstr );
    SetWindowText( hText7, Cstr );

Prosz podajcie mi znaczniki wklejania kodu w treść postu.

P-71603
ison
» 2012-12-22 00:55:23
[cpp] [/cpp]

Uff udało mi sie zdążyć przed krytyką
;)

jeśli chodzi o tego typu konwersje to na przyszłość zapoznaj się też z sprintf i sscanf
P-71619
dzwigar
Temat założony przez niniejszego użytkownika
» 2012-12-22 17:43:48
Wszystko poprawiłem i konwertuje zmienną double za pomocą sprintf do char.
Ale w jaki sposób mam przekonwertować znaki do double z pola tekstowego jeśli ktoś zamiast
kropki wpisze przecinek?

C/C++
void wynik()
{
   
    double b, c, d;
   
    DWORD length = GetWindowTextLength( hText );
    LPSTR buf =( LPSTR ) GlobalAlloc( GPTR, length );
    GetWindowText( hText, buf, length + 3 );
    //SetWindowText( hText4, buf );
   
   
    DWORD length1 = GetWindowTextLength( hText1 );
    LPSTR buf1 =( LPSTR ) GlobalAlloc( GPTR, length );
    GetWindowText( hText1, buf1, length + 3 );
   
    //SetWindowText( hText5, buf1 );
   
   
    DWORD length2 = GetWindowTextLength( hText2 );
    LPSTR buf2 =( LPSTR ) GlobalAlloc( GPTR, length );
    GetWindowText( hText2, buf2, length + 3 );
   
   
   
   
    DWORD length3 = GetWindowTextLength( hText3 );
    LPSTR buf3 =( LPSTR ) GlobalAlloc( GPTR, length );
    GetWindowText( hText3, buf3, length + 3 );
   
   
    double wynik;
   
    b = atof( buf1 );
    c = atof( buf2 );
    d = atof( buf3 );
    wynik =( d + c );
    char result[ 100 ];
   
    sprintf( result, "%f", wynik );
   
    SetWindowText( hText, result );
   
}

Tą funkcje którę polecił DejaVu atof nie radzi sobie z przecinkiem

"Funkcja atof() kończy wczytywać znaki w momencie napotkania jakiegokowiek znaku który nie jest cyfrą, kropką bądź znakiem e, lub E."

Proszę o pomoc.
P-71673
ison
» 2012-12-22 18:10:23
%f dla float
%lf dla double

C/C++
for( size_t i = 0, j = strlen( buf ); i < j; ++i ) {
    if( buf[ i ] == ',' ) buf[ i ] = '.';
   
}
double a;
sscanf( buf, "%lf", & a );
P-71675
dzwigar
Temat założony przez niniejszego użytkownika
» 2012-12-22 20:51:52
Bardzo dzi€kuje za pomoc. Cel osiągnięty.
Jeszcze po kombinuje aby obciąc w wyniku jedną liczbę , zaokrąglić do dwóch liczb po przecinku.
Dziękuje ison :)

Jeszcze raz jesili można to w którym momencie zainterweniować tak abym mial wynik
 dwie liczby po przecinku:

przed konwersją na double ?
po dzialaniu dodawania  ?
przed konwersją na char ?
P-71679
« 1 »
  Strona 1 z 1