Pole Edit - liczby po przecinku

0

Cześć,

Jako, że się dopiero uczę programowania to mam pełno zagadek.
Przejdźmy do rzeczy, mam do napisania w języku C++ dwa programy do obliczania pól figur płaskich, pierwszy program jest strukturalny (konsolowy) i on mi działa, co prawda wyniku nie mam w ramkach ale działa.

Drugi program jest taki sam tylko że ma być obiektowo zrobiony. Program na pierwszy rzut oka działa doczasu kiedy trzeba obliczyć pole koła. Podaje kod na te pole co napisalem:

{
int S1=Edit6->GetTextLen();
char buf[10];
char C1=new char[++S1];
Edit6->GetTextBuf(C1,S1);
{
itoa(3.14
atoi(C1)*atoi(C1),buf,10);
}
Edit7->SetTextBuf(buf);
}

Problem polega na tym, że program w polu Edit7 nie wyświetla liczb po przecinku, czyli jeżeli pole powinno wyjść 12.56 to program wyświetla 12,w strukturalnym tego problemu nie mam. Czytałem gdzieś, że zamiast itoa/atoi można użyć sprintf ale nie mam pojęcia jak tego użyć by działalo.

Zamiast typu int miałem już: float, double.

Wiem, ze jest coś takiego by wyświetlało liczby po przecinku jak - "%.2f" i nawet miałem to użyte ale że nie zadziałało tonie pamiętam jak tego użyłem.

Przeszukałem cale 4programmers i google i znalazłem materiały, ale po zastosowaniu problem nie znikł, pewnie źle kod składam w jedną całość.

Pozdrawiam i licze na pomoc, pewnie problem jest banalny ale nie mogę sobie z tym poradzić.

0

witam,

zamiast atoi() daj atof() - konwertuje ciag na float, uzywasz identycznie jak atoi()
a zamiast itoa daj int sprintf( char *buffer, const char *format, ... )
poniewaz itoa wymaga w parametrach typu int

przykład użycia sprintf

char result[100];
float fnum = 3.14159;
sprintf( result, "%f", fnum );

mozna tez dowolne operacje robic wewnątrz

char result[100];
float fnum = 3.14159;
sprintf( result, "%.3f abc  %.5f", fnum*1234/3-2+3, fnum );

jesli chcesz miec konkretna liczbę miejsc po przecinku
używasz takiego kodu foramatowania:
"%.xf" - gdzie x= miejsca po przecinku

mam nadzieję że to pomoże :)
nie napisze gotowca, zapamietasz jak używać sprintf ;)
pozdrawiam

0

Dzięki za odpowiedź, wieczorem dam znać czy działa.

Na gotowca nie liczę i nawet nie chcę takowego. Wolę podpowiedzi i spróbować samemu napisać działający kod na waszych podpowiedziach.

0
npkwm napisał(a)

witam,

zamiast atoi() daj atof() - konwertuje ciag na float, uzywasz identycznie jak atoi()
a zamiast itoa daj int sprintf( char *buffer, const char *format, ... )
poniewaz itoa wymaga w parametrach typu int

przykład użycia sprintf

char result[100];
float fnum = 3.14159;
sprintf( result, "%f", fnum );

mozna tez dowolne operacje robic wewnątrz

char result[100];
float fnum = 3.14159;
sprintf( result, "%.3f abc  %.5f", fnum*1234/3-2+3, fnum );

jesli chcesz miec konkretna liczbę miejsc po przecinku
używasz takiego kodu foramatowania:
"%.xf" - gdzie x= miejsca po przecinku

mam nadzieję że to pomoże :)
nie napisze gotowca, zapamietasz jak używać sprintf ;)
pozdrawiam

Napisałem coś takiego:

{
int S1=Edit6->GetTextLen();
float fnum = 3.14159;
char buf[10];
char *C1=new char[++S1];
Edit6->GetTextBuf(C1,S1);
{
sprintf(buf, "%.2f", fnum*atof(C1)*atof(C1),fnum);
}
Edit7->SetTextBuf(buf);
}

I teraz wyświetla liczby po przecinku/kropce - ustawiłem by wyświetlał dwie liczby.

Dzięki za poradę, zadziałało.

Kod wkleiłem bo może macie jakieś uwagi?

0
Mateusz.biega napisał(a)
npkwm napisał(a)

witam,

zamiast atoi() daj atof() - konwertuje ciag na float, uzywasz identycznie jak atoi()
a zamiast itoa daj int sprintf( char *buffer, const char *format, ... )
poniewaz itoa wymaga w parametrach typu int

przykład użycia sprintf

char result[100];
float fnum = 3.14159;
sprintf( result, "%f", fnum );

mozna tez dowolne operacje robic wewnątrz

char result[100];
float fnum = 3.14159;
sprintf( result, "%.3f abc  %.5f", fnum*1234/3-2+3, fnum );

jesli chcesz miec konkretna liczbę miejsc po przecinku
używasz takiego kodu foramatowania:
"%.xf" - gdzie x= miejsca po przecinku

mam nadzieję że to pomoże :)
nie napisze gotowca, zapamietasz jak używać sprintf ;)
pozdrawiam

Napisałem coś takiego:

{
int S1=Edit6->GetTextLen();
float fnum = 3.14159;
char buf[10];
char *C1=new char[++S1];
Edit6->GetTextBuf(C1,S1);
{
sprintf(buf, "%.2f", fnum*atof(C1)*atof(C1),fnum);
}
Edit7->SetTextBuf(buf);
}

I teraz wyświetla liczby po przecinku/kropce - ustawiłem by wyświetlał dwie liczby.

Dzięki za poradę, zadziałało.

Kod wkleiłem bo może macie jakieś uwagi?

Zobacz poniżej poprawilem jedną linię zbędne t było, w przykładach dla pokazania ze tak mozna tak zrobilem a u ciebe to jest niepotrzebne....

{
sprintf(buf, "%.2f", fnum*atof(C1)*atof(C1));

pozdrawiam

0

Dzięki za poprawę.

Jeszcze raz dziękuje za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1