getsplus-Programmieraufgabe



  • Hallo Leutz,

    also für mein Studium musste ich einen Informatikkurs belegen und dieser verlangt jetzt eine Belegaufgabe, bei der ich partout nicht weiterkomme...

    Hoffe, Ihr könnt mir helfen:

    "Schreiben Sie eine c-Funktion getsplus(), die wie gets() eine Zeichenkette in einem Datenfeld speichert, aber einen zusätzlichen Parameter vom Typ int hat, mit dem die maximal zu lesende Zeichenzahl angegeben werden kann.
    (= die komplette Prototypen-Syntax ist also: void getsplus(char [], int))

    als Hinweis steht hier noch:
    getsplus() soll die Zeichenkette erst dann von der Tastatur lesen, wenn die Returntaste gedrückt wurde. Es kann also nciht verhindert werden, dass im Tastaturpuffer zu viele Zeichen stehen. Es MUSS aber verhindert werden, dass zu viele Zeichen im Datenfeld gespeichert werden."

    also ehrlich gesagt, habe ich noch nicht mal einen Ansatz. Ich weiß schon, warum ich CHemie studiere 🙂
    Könntet Ihr mir vielleicht einen geben?



  • Vielleicht sowas?

    void getsplus(char s[], int n)
    {
    	int ctr = 0;
    	int c;
    
    	while((c = getchar()) != EOF && c != '\n')
    	{
    		if(ctr < n-1)
    		{
    			s[ctr] = c;
    			++ctr;
    		}
    	}
    
    	s[ctr] = '\0';
    }
    
    int main()
    {
    	char input[10];
    
    	getsplus(input, 10);
    	printf("%s", input);
    
    	getsplus(input, 10);
    	printf("%s", input);
    
    	return 0;
    }
    

    Habe es kombiniert mit dem Zurücksetzen des Eingabebuffers aus http://www.c-plusplus.net/forum/viewtopic.php?t=39349



  • Wie willst du einen evtl. aufgetretenen Fehler zurückgeben? Mit deinem vorgeschlagenen Prototyp geht dies jedenfalls nicht.

    int getsplus(char *string, size_t laenge)
    { /* gibt 0 zurück bei Fehler, sonst !=0 */
      return fgets(string,laenge-1,stdin)!=NULL;
    }
    

    wobei z.B. Fehlerszenarien wie laenge==0 noch nicht extrabehandelt werden.


Anmelden zum Antworten