String mit Leerzeichen einlesen



  • Also hallo mal wieder :/, hab ein Problem das sicher ganz einfach zu lösen ist, und zwar soll der Benutzer einen String samt Leerzeichen mittels scanf(..) einlesen können, mein Problem ist nun halt aber das scanf(..) nur bis zu einem whitespace einliest, und da hier leerzeichen dazugehören bricht er da nun halt sofort ab. also z.B wenn ich eingeben würde "hello world!", würde nur hello auf meiner variable stehen.

    Hmm naja nun meine eigentliche Frage: muss ich das über ne eigene Methode lösen, oder geht das einfacher, mittels formatstring oder so?

    Dankeschön!



  • hmm mir ist gerade fgets(...) in den Sinn gekommen, mit dem könnte is vlt gehen, probier das mal schnell aus 😋



  • also das funktioniert soweit mit fgets() eigentlich ganz gut, nur hab ich dabei halt wieder das Problem das er mir die Enter-Eingaben: sprich \n auch miteinliest... hmpf



  • ok tut mir Leid für den Thread, da hätt ich selber suchen können! 😞

    jedenfalls hier die Lösung:

    scanf("%[^\n]254s",inputString);
    

    so wie ich das sehe kann man die Zeichen die explizit miteingelesen werden können ganz einfach über die eckige Klammer definieren 😃



  • Du könntest das ganze auch Zeichenweise machen.

    for example:

    int main(void) {
    	int c;
    	while ((c = getchar()) != '\n')
    		putchar(c);
    	return 0;
    }
    


  • dankeschön, dass schreib ich mir ne methode, is sogar ne bessere Lösung! 👍



  • #include <stdio.h>
    #include <string.h>
    
    int main(){
        char* x[100]; 
        printf("\nString eingeben: ");
        gets(x);
        printf("\n\nAusgabe:  %s",x);
        getchar();
        return 0;
    }
    


  • KnufflPuffl schrieb:

    dankeschön, dass schreib ich mir ne methode, is sogar ne bessere Lösung! 👍

    Eine was?

    #include <stdio.h> 
    #define SMAXLEN BUFSIZ
    
    int add_char ( char** s, size_t* old_len, char c ) {
    	char* _new = realloc ( *s, *old_len+2 );
    	if ( _new == NULL ) return 1;
    	_new[*old_len] = c, _new[*old_len+1] = 0;
    	*s = _new, *old_len += 1;
    	return 0;
    }
    // Rückgabewerte: 0 alles ok, 1 kein RAM, 2 SMAXLEN überschritten.
    int read_stdin ( char** in ) {
    	int c = 0; size_t len = 0;
    	while ( ( c = getchar() ) != '\n' && c != EOF && len <= SMAXLEN )
    		if ( add_char( in, &len, (char)c ) ) return 1;
    	if ( len > SMAXLEN ) return 2;
    	return 0;
    }
    int main() {
    	char* line = NULL;
    	int echo_on = 1;
    	printf ( "Gebe er maximal %d Zeichen ein: ", SMAXLEN );
    	read_stdin ( &line );
    	if ( line && echo_on ) puts ( line );
    	free ( line );
    }
    

    :p


Anmelden zum Antworten