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

WinApi, wyświetlanie watrości liczbowej w polu statycznego tekstu - błąd aplikacji

Ostatnio zmodyfikowano 2021-02-26 18:27
Autor Wiadomość
jari17
Temat założony przez niniejszego użytkownika
WinApi, wyświetlanie watrości liczbowej w polu statycznego tekstu - błąd aplikacji
» 2021-02-21 16:31:06
Chciałem napisać prosty podprogram konwertujący jakąć wartość int na łańcuch tekstowy z odpowiednimn formatowaniem.
Po uruchomieniu programu przez .exe pojawia mi się błąd "(L "Buffer is too small" && 0)".
C/C++
void WyswietlaczWartosci( HWND UchwytWys, int wartosc, const char * jednostka, int Dzielnik ) {
   
   
char Bufor[ 1000 ] = "";
   
   
//Liczba
    //==============================================
   
int WysLiczba01 = wartosc / Dzielnik;
   
   
char Wys01[ 10 ] = "0";
   
_itoa_s( WysLiczba01, Wys01, sizeof( Wys01 ), 10 );
   
if( WysLiczba01 == 0 && wartosc < 0 ) strcat_s( Bufor, sizeof( Bufor ), "-" );
   
   
strcat_s( Bufor, sizeof( Bufor ), Wys01 );
   
//==============================================
   
    //Liczba po przecinku
    //==============================================
   
if( Dzielnik >= 10 ) {
       
if( wartosc < 0 ) wartosc = wartosc *( - 1 );
       
       
int WysLiczba02 = wartosc % Dzielnik;
       
char Wys02[ 100 ] = "0";
       
_itoa_s( WysLiczba02, Wys02, sizeof( Wys02 ), 10 );
       
strcat_s( Bufor, sizeof( Bufor ), "." );
       
       
while( WysLiczba02 <=( Dzielnik / 10 - 1 ) ) {
           
strcat_s( Bufor, sizeof( Bufor ), "0" );
           
WysLiczba02 = WysLiczba02 * 10;
       
}
       
strcat_s( Bufor, sizeof( Bufor ), Wys02 );
   
}
   
//==============================================
   
   
if( jednostka != "" ) {
       
strcat_s( Bufor, sizeof( Bufor ), " " );
       
strcat_s( Bufor, sizeof( Bufor ), jednostka );
   
}
   
   
   
SetWindowText( UchwytWys, Bufor ); //wpisz tekst do danej kontrolki
}
P-178120
wwojtas
» 2021-02-21 17:45:07
przeczytaj proszę treść

https://cpp0x.pl/kursy/Porady-dla-uzytkownikow-cpp0x-pl/Zakladanie-tematow-na-forum/483

i załącz kod w odpowiednich klamrach

... tu kod ...



P-178122
pekfos
» 2021-02-21 18:10:48
Czemu nie sprintf()?
P-178125
jari17
Temat założony przez niniejszego użytkownika
» 2021-02-21 18:31:59
Czy zamiennik sprintf() może być przyczyną?
P-178128
pekfos
» 2021-02-21 18:35:41
Przyczyną jest błędny kod. sprintf() możesz użyć zamiast większości tego, co masz teraz. Daję taką odpowiedź, bo nie wiadomo co robisz. W pierwszej kolejności odpowiedz czy piszesz w C, czy C++? Potem czy piszesz konwersję bo chcesz, czy dlatego że nie znasz funkcji z biblioteki standardowej?
P-178129
DejaVu
» 2021-02-21 19:49:34
W C++11 masz std::tostring (konwersja int do string).
https://en.cppreference.com/w/cpp/string/basic_string/to_string

Do formatowania możesz też użyć std::stringstream, ale pewnie sprintf też będzie ok.
P-178130
jari17
Temat założony przez niniejszego użytkownika
» 2021-02-21 20:32:12
Piszę w języku C++.
Program ma: pobrać wartość "int" i przekonwertować ją na tekst możliwy do wyświetlenia w oknie aplikacji.
Jest tam jeszcze funkcja dzielnika, która ma ustalać przecinek oraz jest możliwość dopisania jednostki fizycznej na końcu wyświetlanej waryośći.

Ma wyświetlać kolejno stringi:
LiczbaPrzedPrzecinkiem - kropka - LiczbaPoPrzecinku - Jednostka

Np. Z wpisanych argumentów (poza uchwytem): 12684; "kg" ; 100
Ma zrobić stringa: 126.84 kg
P-178133
pekfos
» 2021-02-21 20:49:52
Dla 100; ""; 100 wynikiem ma być 1, czy 1.00? W każdym razie, najprościej będzie jak podzielisz te dwie liczby z zachowaniem części ułamkowej i wypiszesz jako jedną liczbę.
P-178135
« 1 » 2
  Strona 1 z 2 Następna strona