Форум программистов, компьютерный форум CyberForum.ru

Как сделать такой вывод? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2011, 08:11     Как сделать такой вывод? #1
Предположим, у меня есть
C++
1
2
3
4
5
6
7
8
9
10
11
class TLadle
{
public:
    double Radius;
    double Height;
};
class TModel
{
public:
    TLadle Ladle;
};
и я хочу вывести так:
Model={
Model={Ladle={
Model={Ladle={Radius=3.4,
Model={Ladle={Height=4.2,
Model={Ladle=}
Model=}
. К белому тексту не приглядывайтесь, считайте, что его нет, я просто и на форуме не смог придумать лучшего способа сравнять текст. Как это сделать? Только через GDI.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.11.2011, 15:38     Как сделать такой вывод? #2
Цитата Сообщение от taras atavin
я просто и на форуме не смог придумать лучшего способа сравнять текст
для этого есть тег code

что-то похожее на json
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2011, 15:40  [ТС]     Как сделать такой вывод? #3
А по теме?
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
14.11.2011, 16:32     Как сделать такой вывод? #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class TLadle
{
public:
        double Radius;
        double Height;
};
class TModel
{
public:
        TLadle Ladle;
};
 
int main()
{
   TModel g = {TLadle{1,1}};
   return 0;
}
http://liveworkspace.org/code/69d000...08bd5b0ef25d61
только мало компиляторов такое поддерживают пока что
Jupiter
14.11.2011, 16:36
  #5

Не по теме:

Цитата Сообщение от sandye51 Посмотреть сообщение
только мало компиляторов такое поддерживают пока что
чего сдесь поддерживать? такая иницмализация еще в С89 была для структур

taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2011, 16:50  [ТС]     Как сделать такой вывод? #6
Цитата Сообщение от sandye51 Посмотреть сообщение
TModel g = {TLadle{1,1}};
Чего?
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
14.11.2011, 16:51     Как сделать такой вывод? #7
Цитата Сообщение от taras atavin Посмотреть сообщение
Чего?
Это одно и тоже, что:
C++
1
2
3
4
5
6
7
8
9
10
class Foo
{
public:
 int a;
};
int main()
{
  Foo f = { 5 };
 return 0;
}
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2011, 16:53  [ТС]     Как сделать такой вывод? #8
Цитата Сообщение от Jupiter Посмотреть сообщение
такая иницмализация еще в С89 была для структур
А при чём здесь инициализация, к тому же замороченная? Или sandye51 выглядит так:
C++
1
2
3
4
5
char c;
for (c=rnd()%256; c!=0; c=rnd()%256)
{
 std::cout<<c;
}
?
Jupiter
14.11.2011, 16:53
  #9

Не по теме:

Chelioss, у классов приватная область по умолчанию

Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
14.11.2011, 16:54     Как сделать такой вывод? #10
Создайте метод в классе TModel, который будет производит вывод. В нем выведите строку "Model={". Затем на след. "\tLadle={" и "\t\tRadius=" << Ladle.tRadius << endl;
"\t\Height=" << Ladle.Height<< endl;
и строки "\t\t}" "\t}"
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2011, 16:56  [ТС]     Как сделать такой вывод? #11
Цитата Сообщение от Chelioss Посмотреть сообщение
Это одно и тоже, что:
C++
1
2
3
4
5
6
7
8
9
10
class Foo
{
public:
 int a;
};
int main()
{
  Foo f = { 5 };
 return 0;
}
Думаешь, я понимаю, что такое
C++
1
Foo f = { 5 };
?
Задача запутать инит вообще не стоит, мне надо вывести данные, как в первом посте, а не
Model={
Ladle={
Radius=3.4,
Height=4.2,
}
}
.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
14.11.2011, 16:58     Как сделать такой вывод? #12
Цитата Сообщение от taras atavin Посмотреть сообщение
Думаешь, я понимаю, что такое
taras atavin, это инициализация, как для массивов
C++
1
int arr[] = { 1, 2, 3, 4, 100500 };
аналогично можно инициализировать структуры, ну и поля класса если они открыты
sandye51
14.11.2011, 16:58
  #13

Не по теме:

Jupiter, для структур была, а для классов нет. Или ты их не различаешь?

taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2011, 17:00  [ТС]     Как сделать такой вывод? #14
Цитата Сообщение от Jupiter Посмотреть сообщение
taras atavin, это инициализация, как для массивов
С массивами то понятно, там просто каждый следующий по следующему индексу, но у меня то класс. И задача запутать инит и успокоиться не стоит.
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
14.11.2011, 17:02     Как сделать такой вывод? #15
taras atavin, Я ответил выше, только Вам нужно воспользоваться функцией SetWindowText() здесь есть примеры
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2011, 17:03  [ТС]     Как сделать такой вывод? #16
Цитата Сообщение от sandye51 Посмотреть сообщение
Или ты их не различаешь?
Если он даже инициализацию от вывода не отличает, то массив от класса подавно не отличит, а структуру от charа.
Jupiter
14.11.2011, 17:04
  #17

Не по теме:

Цитата Сообщение от sandye51 Посмотреть сообщение
Jupiter, для структур была, а для классов нет.
цитата из стандарта 2003-го
12.6.1 Explicit initialization
For another example,
class X {
public:
int i;
float f;
complex c;
} x = { 99, 88.8, 77.7 };
Here, x.i is initialized with 99, x.f is initialized with 88.8, and complex::complex(double) is
called for the initialization of x.c. ] [Note: braces can be elided in the initializer-list for any aggregate,
even if the aggregate has members of a class type with user-defined type conversions; see 8.5.1. ]

taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2011, 17:06  [ТС]     Как сделать такой вывод? #18
Цитата Сообщение от Xind Посмотреть сообщение
Создайте метод в классе TModel, который будет производит вывод. В нем выведите строку "Model={". Затем на след. "\tLadle={" и "\t\tRadius=" << Ladle.tRadius << endl;
"\t\Height=" << Ladle.Height<< endl;
и строки "\t\t}" "\t}"
Какой нафиг << endl;? Ты гуй от консоли вообще отличаешь?
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
14.11.2011, 17:06     Как сделать такой вывод? #19
taras atavin, или функцией TextOut() из GDI там же http://zetcode.com/tutorials/winapi/gdi/
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2011, 17:06     Как сделать такой вывод?
Еще ссылки по теме:

Как сделать ровный вывод состояния регистров C++
Как сделать вывод чисел в виде квадрата? C++
Как сделать вывод суммы каждого столбца? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
14.11.2011, 17:06     Как сделать такой вывод? #20
Цитата Сообщение от taras atavin Посмотреть сообщение
я хочу вывести
Цитата Сообщение от taras atavin Посмотреть сообщение
Как это сделать? Только через GDI.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <vector>
#include <sstream>
 
#include <windows.h>
 
#define WINWIDTH  640
#define WINHEIGHT 480
 
struct point_t
{
    double x, y;
};
 
struct rect_t
{
    int id;
    point_t tl, br;
};
 
std::vector<rect_t> rect_v;
void paint_rect_v( HDC hdc ); /* интересная часть тут */
 
HINSTANCE hInst;
 
LRESULT CALLBACK WinProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
 
int WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR lpszCmdLine, int nCmdShow )
{
    hInst = hInstance;
 
    rect_v.push_back( { 0, { 15.5, 16.6 }, { 16.6, 17.8 } } );
    rect_v.push_back( { 1, { 1.0, 4.0 }, { 8.0, 5.0 } } );
 
    WNDCLASSEX wc =
    {
        sizeof(WNDCLASSEX),
        0, /*CS_* */
        WinProc,
        0, 0,
        hInstance,
        LoadIcon(0, IDI_APPLICATION),
        LoadCursor(0, IDC_ARROW),
        GetSysColorBrush(COLOR_BTNFACE),
        0,
        "main_win_class",
        LoadIcon(0, IDI_APPLICATION)
    };
 
    if( !RegisterClassEx(&wc) ) return 1;
 
    HWND hMainWnd = CreateWindowEx(WS_EX_APPWINDOW  /*WS_EX_* */ , "main_win_class", "window", WS_SYSMENU | WS_MINIMIZEBOX,
                                  GetSystemMetrics(SM_CXSCREEN)/2 - WINWIDTH/2,
                                  GetSystemMetrics(SM_CYSCREEN)/2 - WINHEIGHT/2,
                                  WINWIDTH,
                                  WINHEIGHT,
                                  0, 0, hInstance, 0);
 
    if(!hMainWnd) return 1;
 
    ShowWindow( hMainWnd, nCmdShow );
    UpdateWindow( hMainWnd );
 
    MSG msg;
 
    while(GetMessage(&msg, 0, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return 0;
}
 
LRESULT CALLBACK WinProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    HDC hdc;
    PAINTSTRUCT ps;
 
    switch( msg )
    {
        case WM_DESTROY:
           PostQuitMessage( 0 );
           break;
 
        case WM_PAINT:
           hdc = BeginPaint( hWnd, &ps );
           paint_rect_v( hdc );
           EndPaint( hWnd, &ps );
           break;
 
        default:
             return DefWindowProc(hWnd, msg, wParam, lParam);
    }
 
    return 0;
}
 
/* интересная часть */
void paint_rect_v( HDC hDc )
{
    RECT rc;
    rc.top = 5;
    rc.left = 5;
 
    SetTextColor( hDc, 0 );
    SetBkMode( hDc, TRANSPARENT );
 
    for( size_t i = 0; i < rect_v.size(); i++ )
    {
        std::ostringstream text( std::ostringstream::out );
 
        text << "rect_v[" << i << "] = {\n    id = " << rect_v[i].id << ";\n"
             "    tl = {\n        x = " << rect_v[i].tl.x << "\n        y = " << rect_v[i].tl.y << "\n    };\n"
             "    br = {\n        x = " << rect_v[i].br.x << "\n        y = " << rect_v[i].br.y << "\n    };\n"
             "};\n";
 
        rc.top += DrawText( hDc, text.str().c_str(), -1, &rc, DT_NOCLIP );
    }
 
}
оно?
Yandex
Объявления
14.11.2011, 17:06     Как сделать такой вывод?
Ответ Создать тему
Опции темы

Текущее время: 23:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru