my_gets()



  • So, also ich will eine Funktion my_gets() schreiben. Ihr soll ein String und die maximale Länge des Strings übergeben werden.

    Unterprogramm:

    void my_gets(char *string, int len)
    {
      int  i = 0;                // Schleifenzähler
      char ch;                   // das Zeichen, das gerade gelesen wird
    
      ch = getchar();
    
      while (ch != '\n' && i < (len-1))          
      {
    	*string = ch;
    	string++;
    	ch = getchar();
    
    	i++;
      }
    
      *string = '\0';           // String abschließen
    }
    

    Jetzt hab' ich aber das Problem, dass das mit der 2.Bedingung i < (len-1) nicht klappt. Kann mir da jemand helfen? Ich find' nämlich schon, das so eine Funktion sinnvoll wäre. Z.b. das ich dann auch noch eine Meldung oder so ausgebe. Schonmal danke.

    Thomas



  • wie wärs damit (ungetestet)

    void my_gets(char *string, int len) 
    { 
      char c;                   // das Zeichen, das gerade gelesen wird 
      for(++len;--len && (c=getchar())!='\n';*string++=c);
      *string = '\0';
    }
    

    je nachdem ob len inklusive oder exklusive nullbyte sein soll ++len weglassen...



  • Danke für die Antwort, aber soweit ich seh' funktioniert es nicht... 😞

    Thomas



  • nimm fgets() mit stdin als file handle.



  • nimm fgets() mit stdin als file handle.

    hehe das wäre in etwa das gleiche wenn man mystrlen implementiert indem man strlen aufruft... 😃

    Danke für die Antwort, aber soweit ich seh' funktioniert es nicht... 😞

    was geht denn nicht?

    habs eben mal angetest... wenn ich 012345789 eingebgen hat, hat er mir das auch wieder ausgegeben...



  • [quote="Windalf"]

    nimm fgets() mit stdin als file handle.

    hehe das wäre in etwa das gleiche wenn man mystrlen implementiert indem man strlen aufruft... 😃

    Ja, du hast recht. Aber für den Anfang reichts mir. Die Idee ist wirklich klasse. Und mit fflush(stdin) leere ich noch den Puffer ;-).

    Danke für die Antwort, aber soweit ich seh' funktioniert es nicht... 😞

    was geht denn nicht?

    habs eben mal angetest... wenn ich 012345789 eingebgen hat, hat er mir das auch wieder ausgegeben...

    Kann sein. Aber auf jeden Fall, bricht das Programm nicht ab, wie es laut der Schleife ja soll. Ich verwende jetzt erstmal fgets.

    Danke!!!

    Thomas



  • wie wärs mit nem getc() loop?
    http://www.cppreference.com/stdio/getc.html



  • c.rackwitz schrieb:

    wie wärs mit nem getc() loop?
    http://www.cppreference.com/stdio/getc.html

    Sicher auch eine Möglichkeit. Danke sehr 🙂 für die Hilfe.

    Thomas



  • keine ahnung, wo dein problem liegt. ich hab deine funktion mal kompiliert und bei mir funktioniert sie einwandfrei!


Anmelden zum Antworten