String mit zeitverzögerung



  • Hallo, ich möchte einen String zeitverzögert ausgeben...

    z.b für "Hallo"

    printf("H");
    'eine sekunde warten;
    printf("a");
    'eine sekunde warten;
    printf("l");
    ..... etc

    Naja, die ausgabe will ich in mit einer for schleife realisieren, das bringe ich noch fertig, aber ich weiss nicht, wie ich die Zeitverzögerung realisieren kann....
    Kann mir jemand sagen, wie das geht, und welche includes ich dazu benötige??

    Danke...

    Ach ja, das ganze soll auf Linux laufen. (RH9)

    greez



  • dan mach das so

    printf("H"); 
    Sleep(1000); 
    printf("a"); 
    Sleep(1000); 
    printf("l"); 
    //...
    

    MFG TaccoGo



  • Sowas ist nicht in ANSI-C enthalten, aber gut, dass du Linux erwähnt hast:
    man: sleep(3)
    man: usleep(3)
    man: nanosleep(2)



  • also erst mal ist das was du da schreibst kein string sondern das sind schlichtweg ausgaben. aber schwamm drüber! 😉

    ich würds mit per WinAPI lösen:

    void delay(double sec)
    {
    	const DWORD dwWaitStartTime = GetTickCount();
    	while((GetTickCount()-dwWaitStartTime) < sec*1000);
    }
    

    da wir ja aber im ansi-c forum sind versuchs mal über mittels zweier geschachtelter for-schleifen:

    void delay(int time)
    {
       int  fak1, fak2;
       for(fak1=1; fak1<=time*100; ++fak1)
          for(fak2=1; fak2<=1000; ++fak2);
    }
    

    mfg Helmut`



  • Hallo,
    ist ja möglich das das mit Sleep() nicht in ansi-c get aber in c++.
    das ist nicht aus linux.

    MFG TaccoGo



  • TaccoGo schrieb:

    ist ja möglich das das mit Sleep() nicht in ansi-c get aber in c++.

    Sleep ist weder in ansi-c noch in iso-c++, sondern in der WinAPI.



  • eben! einige compiler liefern zwar funktionen zur zeitverzögerung mit, aber ist halt nicht ansi konform. vllt ist meine lösung mit den for-schleifen nicht schön, aber auf jeden fall alle mal konform! 😉 😃



  • also mit #include <stdio.h> unter VC++
    kann man Slepp() auch in c++ nutze ohne api.



  • Ok, hast evtl recht 😉 Trotzdem sind wir ja im ANSI-C Forum...:)



  • ja wust ich nich das das in ansi-c das nicht get.
    dan halt doch mit einer schliffe 🙂

    MFG TaccoGo



  • Das mit der Schleife funktioniert zwar, läuft dann aber auf jedem Rechner verschieden lang. Besser ist es, in diesem Fall auf plattformspezifische Funktionen zurückzugreifen, was in diesem Fall kein großes Problem darstellt, weil es für diese Funktion auf praktisch jeder Plattform eine Variante gibt.
    Die für Linux wurden ja bereits genannt.



  • Ich wollt ja auch noch plattformunabhängig bleiben, natürlich gibt es 1000 verschiedene möglichkeiten...:)



  • #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    
    void delayed_string(const char *string, unsigned long delay)
    {
    	int i;
    
    	for(i=0;i<=strlen(string);i++)
    	{
    		usleep(delay);
    		printf("%c",string[i]);
    		fflush(stdout);
    	}
    	return;
    }
    
    int main(int argc, char *argv[])
    {
    	int i;
    
    	if(argc<2)
    	{
    		printf("usage: %s <string> ...\n",argv[0]);
    		exit(-1);
    	}
    	for(i=1;i<argc;i++)
    	{
    		delayed_string(argv[i],100000);
    		printf("\n");
    	}
    	exit(0);
    }
    


  • Es gibt keine plattformunabhängige Variante für die sleep-Funktionen. Man könnte sich höchstens was mit clock() bauen.

    Sleep() ist und bleibt WinAPI und ist kein C++ Standard.

    @Helmut
    Deine zweite Variante mit den zwei Schleifen bringt nichts, da es bei jedem Rechner unterschiedlich schnell abgearbeitet wird.

    Hier die Variante mit clock():

    void warte(unsigned long sekunden)
    {
       clock_t ende;
    
       for(ende = clock() + CLK_TCK * sekunden; clock() < ende; );
    }
    

    Hier kann man die verwendeten Konstanten und Funktionen nachschauen: http://www.cplusplus.com/ref/indexr.html



  • naja, wenn's wirklich genau sein soll brint meine funktion nichts, da hast du wohl recht. das hatte ich gar nicht bedacht 🙄


Anmelden zum Antworten