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

[C++, WinAPI] Losowanie treści w polu edycji za pomocą buttona

Ostatnio zmodyfikowano 2012-08-23 15:34
Autor Wiadomość
kszere
Temat założony przez niniejszego użytkownika
» 2012-08-22 11:05:17
Ok, mam:
C/C++
LRESULT CALLBACK WindowProcedure( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
{
    switch( message )
    {
    case WM_KEYDOWN:
    case WM_COMMAND:
        switch( wParam )
        {
        case IDM_GENERUJ: case ID_GENERUJ: case VK_RETURN:
            //char * msg = 0;
            int rand()
            switch( rand( GetTickCount() % 2 ) )
            {
            case 0: SetWindowText( hText, "1" );
                break;
            case 1: SetWindowText( hText, "2" );
                break;
                default: MessageBox( hwnd, "Losowanie pytania nie powiodłp się!", "Błąd", MB_ICONSTOP );
            }
            break;
        }
        break;
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
        default:
        return DefWindowProc( hwnd, message, wParam, lParam );
    }
   
    return 0;
}

Wywala błąd:


-----------------------------

Compiling: main.cpp
...\main.cpp: In function 'LRESULT WindowProcedure(HWND__*, UINT, WPARAM, LPARAM)':
...\main.cpp:117: error: expected initializer before 'switch'
Process terminated with status 1 (0 minutes, 0 seconds)
1 errors, 0 warnings
 
... ale jak naprawię ten to będzie kolejny: error: 'hText' was not declared in this scope
P-63274
kszere
Temat założony przez niniejszego użytkownika
» 2012-08-23 12:58:26
Pomoże ktoś?
Bardzo proszę.
P-63378
m4tx
» 2012-08-23 13:09:41
117 linii tu nie ma. :P

C/C++
int rand()
Co to jest? :)

Jeszcze jedno - jak potrzebujesz zmiennych w
case
, to musisz tego
case
 dać do oddzielnego bloku, tj. objąć go nawiasami klamrowymi.

error: 'hText' was not declared in this scope
To oznacza, że nie zadeklarowałeś hText, bądź jest to zmienna lokalna należąca do innej funkcji. Musisz zamienić ją na zmienną globalną. :)
P-63379
kszere
Temat założony przez niniejszego użytkownika
» 2012-08-23 14:06:02
Ok zmienna globalna jest,
int rand()
 wykasowane.

C/C++
LRESULT CALLBACK WindowProcedure( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
{
    switch( message ) /* handle the messages */
    {
    case WM_KEYDOWN:
    case WM_COMMAND:
        switch( wParam )
        {
        case IDM_GENERUJ: case ID_GENERUJ: case VK_RETURN:
            {
                switch( rand( GetTickCount() % 2 ) )
                {
                case 0: SetWindowText( hText, "1" );
                    break;
                case 1: SetWindowText( hText, "2" );
                    break;
                    default: MessageBox( hwnd, "Losowanie pytania nie powiodłp się!", "Błąd", MB_ICONSTOP );
                    break;
                }
                break;
            }
            break;
        }
    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;
        default:
        return DefWindowProc( hwnd, message, wParam, lParam );
    }
   
    return 0;
}

Build log:

Compiling: main.cpp
c:\program files (x86)\codeblocks\mingw\bin\../lib/gcc/mingw32/4.4.1/../../../../include/stdlib.h: In function 'LRESULT WindowProcedure(HWND__*, UINT, WPARAM, LPARAM)':
c:\program files (x86)\codeblocks\mingw\bin\../lib/gcc/mingw32/4.4.1/../../../../include/stdlib.h:360: error: too many arguments to function 'int rand()'
...main.cpp:117: error: at this point in file
Process terminated with status 1 (0 minutes, 0 seconds)
2 errors, 0 warnings

...i otwiera mi plik stdlib.h na 360 lini.

Cały czas nie wiem czy dobrze jest:
switch( rand( GetTickCount() % 2 ) )
P-63387
m4tx
» 2012-08-23 14:10:03
Cały czas nie wiem czy dobrze jest: switch( rand( GetTickCount() % 2 ) )
Nie :) Losowanie masz wyjaśnione tutaj: » Kurs C++ » Poziom 2Pseudolosowe liczby całkowite lekcja.
P-63388
kszere
Temat założony przez niniejszego użytkownika
» 2012-08-23 14:25:21
(( rand() % 50 ) + 7 )

Więc z tego co przeczytałem i wywnioskowałem powinno być:
switch((( rand( GetTickCount() ) % 2 ) + 0 ) )
 niestety dalej błąd:/
P-63389
m4tx
» 2012-08-23 14:36:13
powinno być: switch((( rand( GetTickCount() ) % 2 ) + 0 ) )
Nie.
rand()
 nie przyjmuje argumentów :) Pamiętaj też, że powinieneś użyć funkcji srand() przez pierwszym losowaniem.
P-63390
kszere
Temat założony przez niniejszego użytkownika
» 2012-08-23 14:39:59
Ok wstawiam
srand()
, ale co zrobić z
switch((( rand( GetTickCount() ) % 2 ) + 0 ) )
 niestety już nie rozumiem.
P-63391
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona