Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

04.06.2006, 10:36

For-Schleifen

Ich hab ein Problem:
Mit der For-Schleife hab ich einen Countdown erstellt, der mir aber zu schnell runter zählt: innerhalb von 1/10 sec von 5 auf 0 gezählt.
Ich möchte aber das nach jeder Zahl das Programm 1sec wartet und erst dann den nächtsen i Wert anzeigt.
Wie schaffe ich das?

Anonymous

unregistriert

2

04.06.2006, 10:38

Also eine Möglichkeit ist die Sleep(milliseconds) Funktion, dazu wird
soviel ich weiß die windows.h benötigt, aber steht auch genauer in der
MSDN. Das ist glaube ich die einfachste Möglichkeit aber ich glaube auch
nicht die Beste ;) Kannst es ja mal ausprobieren und ansonsten
auf weitere Antworten warten.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

04.06.2006, 11:32

da gibts haufenweise möglichkeiten.
alles was du brauchst, is eine api die dir irgendwie die zeit gibt.

z.b. timeGetTime(), GetTickCount(), time(), GetSystemTime, QueryPerformanceCounter(), SetTimer(), ...

dann brauchst du nurmehr z.b. in einer while schleife warten bis eine sekunden vergangen ist und dann runterzählen usw.

bsp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <windows.h>

DWORD dwStart = GetTickCount();
DWORD dwCur = dwStart;
int i = 5;

while( i > 0 )
{       

    dwCur = GetTickCount();

    if( ( dwCur - dwStart ) >= 1000 )
        --i;

}


oder eben wie DarkRaider gesagt hat mit Sleep(), was bei normalen anwendungen sicher besser ist, da die cpu in der zwischenzeit nicht in einer schleife hängt sondern andre sachen machen kann.


C-/C++-Quelltext

1
2
3
4
5
#include <windows.h>


for( int i = 5; i > 0; --i )
    Sleep( 1000 );


welche methode sich anbietet hängt von anwendungsfall ab (erf. genauigkeit etc...)

ext

Treue Seele

  • Private Nachricht senden

4

04.06.2006, 13:45

Ersteres läuft bei 100% CPU-Auslastung, bei letzterem gibt man CPU-Zeit an das System zurück.
Daher ist letztere Variante zu bevorzugen. Denn es kann bei beiden Methoden mal plötzlich passieren, dass ein anderer Prozess dazwischenfunkt.

Anonymous

unregistriert

5

04.06.2006, 13:49

Zu bevorzugen ist eher die SetTimer variante mit WM_TIME, dazu noch mit GetMessage und Ruhe ist ;)

6

04.06.2006, 17:46

!?

gut des mit dem Sleep klappt einwanderfrei!!! Danke!
aber jetzt tickt mein prog(taschenrechner) nicht mehr richtig!!!
Hier der quelltext, kopiert ihn einfach, compiliert ihn und startet des prog.
Kann dann mir jemand den Fehler sagen? bitte...

C-/C++-Quelltext

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
#include <iostream>
#include <windows.h>

using namespace std;

int main ()
{
   

    float a, b;
    char chZeichen, chEndteil;

    
    {

    cout << "Willkommen im Matheprogramm von Alexander Stepanov!\n\n\n" << endl;
    cout << "___________________________________________________" << endl;
    cout << ">>>>>>>>>>>>>>>>>> | Willkommen | <<<<<<<<<<<<<<<<<" << endl;
    cout << "___________________________________________________" << endl;



        cout << "\n\n Bitte geben Sie ein: | a +(-, /, *) b |!" << endl;
        cin >> a;
        cin >> chZeichen;
        cin >> b;

    do
    {
        if(chZeichen == '+')
            cout << ">>>>>>>   Ergebnis: "<< a+b <<"   <<<<<<<\a" << endl;

        if(chZeichen == '-')
            cout << ">>>>>>>   Ergebnis: "<< a-b <<"   <<<<<<<\a" << endl;

        if(chZeichen == '/')
            cout << ">>>>>>>   Ergebnis: "<< a/b <<"   <<<<<<<\a" << endl;

        if(chZeichen == '*')
            cout << ">>>>>>>   Ergebnis: "<< a*b <<"   <<<<<<<\a" << endl;
        else
            cout << "\aKannst du net lesen oder wat???? es gibt nur die 4 Zeichen: "<<endl;
            cout << "\aplus(+); minus(-); mal(*) und geteilt(/)!!!!\a"<<endl;
    

        cout << "\n\n (w)eiter     (b)eenden" << endl;
        cin >> chEndteil;



    } while (chEndteil != 'b');
}

    for(int i =5; i>=1; --i)
    
    {
        cout << "Programm wird bendet in: " << i << "sec." << endl;     
        Sleep(1000);
    }


    cout << "___________________________________________________" << endl;
    cout << ">>>>>>>>>>>>>>>>>>>> | ENDE | <<<<<<<<<<<<<<<<<<<<<" << endl;
    cout << "___________________________________________________\a" << endl;

    return 0;
}

:?: :?
pls help

Phili

unregistriert

7

04.06.2006, 18:00

Moment mal, ich hab den Code ja nur überflogen, aber:

Du hast

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
int main()

{

//Code


}

//Endtei


Der Endteil ist ja nach Programmende...

Phili

unregistriert

8

04.06.2006, 18:02

Was soll die Klammer?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
float a, b; 
    char chZeichen, chEndteil; 

    
 [b]   { [/b]
    cout << "Willkommen im Matheprogramm von Alexander Stepanov!\n\n\n" << endl; 
    cout << "___________________________________________________" << endl; 
    cout << ">>>>>>>>>>>>>>>>>> | Willkommen | <<<<<<<<<<<<<<<<<" << endl; 
    cout << "___________________________________________________" << endl; 

Phili

unregistriert

9

04.06.2006, 18:05

C-/C++-Quelltext

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
#include <iostream> 
#include <windows.h> 

using namespace std; 

int main () 
{ 
    

    float a, b; 
    char chZeichen, chEndteil; 

     do 
    { 

    cout << "Willkommen im Matheprogramm von Alexander Stepanov!\n\n\n" << endl; 
    cout << "___________________________________________________" << endl; 
    cout << ">>>>>>>>>>>>>>>>>> | Willkommen | <<<<<<<<<<<<<<<<<" << endl; 
    cout << "___________________________________________________" << endl; 



        cout << "\n\n Bitte geben Sie ein: | a +(-, /, *) b |!" << endl; 
        cin >> a; 
        cin >> chZeichen; 
        cin >> b; 

         if(chZeichen == '+') 
            cout << ">>>>>>>   Ergebnis: "<< a+b <<"   <<<<<<<\a" << endl; 

        if(chZeichen == '-') 
            cout << ">>>>>>>   Ergebnis: "<< a-b <<"   <<<<<<<\a" << endl; 

        if(chZeichen == '/') 
            cout << ">>>>>>>   Ergebnis: "<< a/b <<"   <<<<<<<\a" << endl; 

        if(chZeichen == '*') 
            cout << ">>>>>>>   Ergebnis: "<< a*b <<"   <<<<<<<\a" << endl; 
        else 
            cout << "\aKannst du net lesen oder wat???? es gibt nur die 4 Zeichen: "<<endl; 
            cout << "\aplus(+); minus(-); mal(*) und geteilt(/)!!!!\a"<<endl; 
    

        cout << "\n\n (w)eiter     (b)eenden" << endl; 
        cin >> chEndteil; 



    } while (chEndteil != 'b'); 

    for(int i =5; i>=1; --i) 
    
    { 
        cout << "Programm wird bendet in: " << i << "sec." << endl;      
        Sleep(1000); 
    } 


    cout << "___________________________________________________" << endl; 
    cout << ">>>>>>>>>>>>>>>>>>>> | ENDE | <<<<<<<<<<<<<<<<<<<<<" << endl; 
    cout << "___________________________________________________\a" << endl; 

    return 0; 
} 




Wirkt mir sinnvoller.

10

04.06.2006, 18:07

So srry mein fehlr: Die klaamer war noch von der alten while-schleife, jetzt ist sie weg aber immer noch ist der selber fehler da..

C-/C++-Quelltext

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
#include <iostream>
#include <windows.h>

using namespace std;

int main ()
{
   

    float a, b;
    char chZeichen, chEndteil;

    
    

    cout << "Willkommen im Matheprogramm von Alexander Stepanov!\n\n\n" << endl;
    cout << "___________________________________________________" << endl;
    cout << ">>>>>>>>>>>>>>>>>> | Willkommen | <<<<<<<<<<<<<<<<<" << endl;
    cout << "___________________________________________________" << endl;



        cout << "\n\n Bitte geben Sie ein: | a +(-, /, *) b |!" << endl;
        cin >> a;
        cin >> chZeichen;
        cin >> b;

    do
    {
        if(chZeichen == '+')
            cout << ">>>>>>>   Ergebnis: "<< a+b <<"   <<<<<<<" << endl;

        if(chZeichen == '-')
            cout << ">>>>>>>   Ergebnis: "<< a-b <<"   <<<<<<<" << endl;

        if(chZeichen == '/')
            cout << ">>>>>>>   Ergebnis: "<< a/b <<"   <<<<<<<" << endl;

        if(chZeichen == '*')
            cout << ">>>>>>>   Ergebnis: "<< a*b <<"   <<<<<<<" << endl;
        else
            cout << "Kannst du net lesen oder wat???? es gibt nur die 4 Zeichen: "<<endl;
            cout << "plus(+); minus(-); mal(*) und geteilt(/)!!!!"<<endl;
    

        cout << "\n\n (w)eiter     (b)eenden" << endl;
        cin >> chEndteil;



    } while (chEndteil != 'b');


    for(int i =5; i>=1; --i)
    
    {
        cout << "Programm wird bendet in: " << i << "sec." << endl;     
        Sleep(1000);
    }


    cout << "___________________________________________________" << endl;
    cout << ">>>>>>>>>>>>>>>>>>>> | ENDE | <<<<<<<<<<<<<<<<<<<<<" << endl;
    cout << "___________________________________________________" << endl;

    return 0;
}

Werbeanzeige