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 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. |
|
DejaVu |
» 2012-12-11 23:21:26 |
|
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ą 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: void wynik() { DWORD length = GetWindowTextLength( hText ); LPSTR buf =( LPSTR ) GlobalAlloc( GPTR, length ); GetWindowText( hText, buf, length + 1 ); DWORD length1 = GetWindowTextLength( hText1 ); LPSTR buf1 =( LPSTR ) GlobalAlloc( GPTR, length ); GetWindowText( hText1, buf1, length + 1 ); DWORD length2 = GetWindowTextLength( hText2 ); LPSTR buf2 =( LPSTR ) GlobalAlloc( GPTR, length ); GetWindowText( hText2, buf2, length + 1 ); DWORD length3 = GetWindowTextLength( hText3 ); LPSTR buf3 =( LPSTR ) GlobalAlloc( GPTR, length ); GetWindowText( hText3, buf3, length + 3 ); 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. |
|
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 |
|
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? void wynik() { double b, c, d; DWORD length = GetWindowTextLength( hText ); LPSTR buf =( LPSTR ) GlobalAlloc( GPTR, length ); GetWindowText( hText, buf, length + 3 ); DWORD length1 = GetWindowTextLength( hText1 ); LPSTR buf1 =( LPSTR ) GlobalAlloc( GPTR, length ); GetWindowText( hText1, buf1, length + 3 ); 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. |
|
ison |
» 2012-12-22 18:10:23 %f dla float %lf dla double for( size_t i = 0, j = strlen( buf ); i < j; ++i ) { if( buf[ i ] == ',' ) buf[ i ] = '.'; } double a; sscanf( buf, "%lf", & a );
|
|
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 ? |
|
« 1 » |