Ausgabeproblem bei einem eingelesenen string



  • Guten Tag, ich habe ein Problem mit meinem Code. Das Problem ist, dass meiner Eingabe, sobald ein Leerzeichen auftaucht, nur der Name oder das Wort vor dem Leerzeichen ausgegeben wird. Wo liegt genau das Problem ?

    Hier ist mein Code:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main () {
    
        int i;
        int size;
        char *Farray;
        int laenge;
    
        printf("Bitte geben Sie die Groesse Ihres Array ein: ");
        scanf("%d", &size);
    
        Farray = (char*) malloc(size * sizeof(char));
    
        if(Farray != 0) {
            printf("\n\nEs wurde Speicher reserviert.");
        } else {
            printf("\n\nEs konnte kein Speicher reserviert werden!");
            return 0;
        }
    
        printf("\n\nGeben Sie nun Ihren Text ein: ");
        scanf("%s", &*Farray);
    
        laenge = strlen(Farray);
        printf("Ausgabe: ");
    
        for(i=0; i<laenge; ++i) {
        printf("%c", Farray[i]);
        }
    
        return 0;
    
    }
    

  • Mod

    -Lies doch mal die Dokumentation von scanf, deine Frage sollte dort klar beantwortet werden. Und wenn du genau liest, findest du auch eine mögliche Antwort auf die Frage, wie es wie gewünscht funktionieren würde.
    -Dein Array ist mindestens um 1 zu kurz

    • sizeof(char) ist übrigens per Definition immer 1.
    • &*Farray ? Überleg mal, ob das nicht vielleicht einfacher geht.
      -Wenn du schon dabei bist, die Anleitung von scanf zu lesen lies doch auch mal die Anleitung von printf, oder besser noch, stöber mal in den Ausgabefunktionen, ob es da nicht irgendwelche wesentlich einfacheren Möglichkeiten gibt, Zeichenfolgen auszugeben.
      -Das Casten von malloc-Rückgabewerten ist mindestens kontrovers. Es ist mindestens schon einmal komplett unnötig (Falls es ohne Cast nicht funktioniert, benutzt du keinen C-Compiler, sondern einen C++-Compiler. Tu das nicht!) und zeigt daher, dass man die Sprache nicht korrekt beherrscht. Zudem kann es gewisse Arten von Fehlern verdecken, die dann zu geheimnisvollen Abstürzen zur Laufzeit führen, anstelle von Compilerwarnungen.


  • wo liegt denn nun das Problem ?
    ich habe die Eingabe ein wenig verändert. Außerdem das mit dem casten wurde uns so vom Professor beigebracht.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main () {
    
        int i;
        int size;
        char *Farray;
        char Ausgabe[size];
        int laenge;
    
        printf("Bitte geben Sie die Groesse Ihres Array ein: ");
        scanf("%d", &size);
    
        Farray = (char*) malloc(size * sizeof(char));
    
        if(Farray != 0) {
            printf("\n\nEs wurde Speicher reserviert.");
        } else {
            printf("\n\nEs konnte kein Speicher reserviert werden!");
            return 0;
        }
    
        printf("\n\nGeben Sie nun Ihren Text ein: ");
        fgets(Farray, size, stdin);
        sscanf(Farray, "%c", &Ausgabe );
    
        laenge = strlen(Farray);
        printf("Ausgabe: ");
    
        printf("%c", Ausgabe);
    
        return 0;
    
    }
    

  • Mod

    Das hast du nun deutlich verschlimmbessert. Programmieren ist nicht Raten. Irgendwie kann ich nicht glauben, dass du in der Zeit eine komplette Dokumentation von scanf aufmerksam gelesen haben kannst. Welche hast du gelesen?




  • Mod

    Cobain schrieb:

    http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/004_c_ein_ausgabe_001.htm

    Aha, das erklärt so ziemlich alles. Siehe:
    https://www.c-plusplus.net/forum/272350
    Ich fürchte, du wirst jede Menge Unsinn gelernt haben, den du besser wieder vergisst. Ist nicht deine Schuld, konntest du nicht wissen. Ist aber leider Fakt, dass das Buch totaler Pfusch ist.

    Eine richtige Referenz ist das leider auch nicht. Guck mal hier:
    http://en.cppreference.com/w/c/io
    oder hier:
    http://www.cplusplus.com/reference/cstdio/

    Leider wird das vermutlich nicht ausreichen. Dein zweites Beispiel zeigt, dass du aus dem Wolf-Buch auch Quatsch über Arrays und allgemeine Programmstruktur gelernt hast. Das erste Programm ging ja noch, aber deine Verbesserung ist ziemlich verworren. Beispiel: Wie viele Eingaben machst du?



  • Cobain schrieb:

    Außerdem das mit dem casten wurde uns so vom Professor beigebracht.

    Löse dich von dem sklavischen Glauben, Professoren könnten programmieren.
    Ebenso unqualifiziert sind meistens die Google-"Treffer", wie du selbst bestätigt hast.



  • Ein Array (auch Variable Length Array (kurz VLA)) wird bei der Definition in der Größe und Adresse festgelegt und diese können danach auch nicht mehr geändert werden.

    Du definierst ein Array Ausgabe in Zeile 11. Wie groß ist das?


Anmelden zum Antworten