Benutzereingaben länger als ein Zeichen



  • Hallo zusammen!

    Vorneweg, ich bin völliger Neuling in Sachen Programmierung und hangele mich derzeit durch Tutorials.

    Ich habe mir vorgenommen ein Bewertungsprogramm für Teilnehmer eines Lehrgangs zu schreiben. Die Teilnehmer werden dort in insgesamt sechs Kategorien mit Noten von a -d bewertet. Aus den jeweiligen Noten setzt sich ein Textblock zusammen, die Teilnehmerbewertung.
    Mein Programm soll das automatisieren. Sprich, ich möchte die Tastatureingaben "Geschlecht", "Name" und die Gesambewertung, z.B. "aabcbd" abfragen, woraus das Programm dann den Text generiert.

    DAS PROBLEM:

    Durch die Tutorials bisher bin ich soweit, dass ich mit "Char", "get char" und "scan" zwar Tastatureingaben abfragen kann und dann mit "if" verschiedene Sätze ausgeben kann... Allerdings kann ich immer nur ein Zeichen abfragen! Einen ganzen Namen oder die Gesamtbuchstaben mit 6 Zeichen kann ich nicht eingeben.

    Gibt es dort einen speziellen Befehl?

    Wie gehe ich vor?

    Vielen Dank für die Hilfe im Voraus!



  • z.B. scanf oder gets bzw. fgets



  • scanf benutze ich ja bereits...

    " char name=0;
    printf("Nenne mir den Namen");
    scanf("%c", &name);
    printf("\nIhr Name lautet '%c'.\n", name);

    "

    Nur zeigt mir das Programm dann nur den ersten Buchstaben des eingegebenen Namens an. Ich brauche aber den ganzen.

    Was mache ich falsch?



  • char hat ja auch nur Platz für einen Buschstaben.

    Du brauchst Arrays (Strings).

    char name[30] = "";
    printf("Nenne mir den Namen");
    scanf("%s", name);
    printf("\nIhr Name lautet '%s'.\n", name);
    

    Nimm dein Buch und lese dir das Kapitel gründlich durch.
    Das sind ganz wichtige C-Grundlagen.



  • %c ist auch nur für ein char, nicht für einen String (also eine Zeichenkette, eine Reihe von char's). Probier mal so:

    char name[256];
    printf("Nenne mir den Namen"); 
    scanf("%256s",name);
    printf("\nIhr Name lautet '%s'.\n", name);
    

    In der Doku steht auch, welche Platzhalter außer %c und %s es noch so gibt (z.B. für verschiedene Zahlenformate).



  • Das wars, was ich suchte, vielen Dank!

    Ja mein Tutorial lässt in diesem Fall wohl ein wenig zu wünschen übrig.
    Werde mich hier auf dieser Seite mehr umschauen.

    Eine Frage noch:

    Gibt es einen Befehl, mit dem ich eine spezifische Stelle einer Eingabe scannen kann. Aso zb:

    Eingabe: aabcdc

    "Scanne die dritte Stelle"?



  • theralph schrieb:

    Das wars, was ich suchte, vielen Dank!

    Ja mein Tutorial lässt in diesem Fall wohl ein wenig zu wünschen übrig.
    Werde mich hier auf dieser Seite mehr umschauen.

    Eine Frage noch:

    Gibt es einen Befehl, mit dem ich eine spezifische Stelle einer Eingabe scannen kann. Aso zb:

    Eingabe: aabcdc

    "Scanne die dritte Stelle"?

    Du hast doch den String eingelesen und kannst nun selbstverständlich auch nur das dritte Zeichen weiter verwerten. Gib mal testweise name[2] aus (2 für das dritte Zeichen, weil nullbasiert).

    printf("Drittes Zeichen des Namens: %c\n",name[2]);
    

    Du solltest jetzt aber wirklich mal ein Buch/Tutorial nehmen und was zum Thema Strings bzw. char-Arrays in C lesen. Dann sind dir diese Dinge in Zukunft auch sofort klar.



  • Das kannst du ganz leicht mit Zeigern auf einen Index im Array erreichen:

    char name[256];
    char* ptr;
    printf("Nenne mir den Namen ");
    scanf("%255s",name);
    printf("\nIhr Name lautet '%s'.\n", name);
    if(strlen(name)>2) // sicherstellen, dass mindestens 3 Buchstaben eingegeben wurden
    {
      ptr = &name[2];	
      printf("Der 3. Buchstabe ist ein %c, der string ab der 3. Stelle lautet: %s", *ptr, ptr);
    }
    


  • theralph schrieb:

    Das wars, was ich suchte, vielen Dank!

    Ja mein Tutorial lässt in diesem Fall wohl ein wenig zu wünschen übrig.
    Werde mich hier auf dieser Seite mehr umschauen.

    Eine Frage noch:

    Gibt es einen Befehl, mit dem ich eine spezifische Stelle einer Eingabe scannen kann. Aso zb:

    Eingabe: aabcdc

    "Scanne die dritte Stelle"?

    char buffer[1024];
    puts( "Gib den Text ein! (Achtung: Wenn Du mehr als 1023 Zeichen eingibst, wird die Festplatte formatiert, Strafe muß sein)" );
    scanf( "%s", buffer );
    if( strlen( buffer ) >= 3 )
        printf( "Die dritte stelle war %c\n", buffer[2] );
    else
       puts( "Du Schlingel" );
    


  • Vielen Dank!

    Das mit dem Buch lesen, werd ich jetz auch sofort tun^^



  • _Falke schrieb:

    Das kannst du ganz leicht mit Zeigern auf einen Index im Array erreichen:

    char name[256];
    char* ptr;
    printf("Nenne mir den Namen ");
    scanf("%255s",name);
    printf("\nIhr Name lautet '%s'.\n", name);
    if(strlen(name)>2) // sicherstellen, dass mindestens 3 Buchstaben eingegeben wurden
    {
      ptr = &name[2];	
      printf("Der 3. Buchstabe ist ein %c, der string ab der 3. Stelle lautet: %s", *ptr, ptr);
    }
    

    Welchen Vorteil siehst Du in der Benutzung des Zeigers?



  • mgaeckler schrieb:

    _Falke schrieb:

    Das kannst du ganz leicht mit Zeigern auf einen Index im Array erreichen:

    char name[256];
    char* ptr;
    printf("Nenne mir den Namen ");
    scanf("%255s",name);
    printf("\nIhr Name lautet '%s'.\n", name);
    if(strlen(name)>2) // sicherstellen, dass mindestens 3 Buchstaben eingegeben wurden
    {
      ptr = &name[2];	
      printf("Der 3. Buchstabe ist ein %c, der string ab der 3. Stelle lautet: %s", *ptr, ptr);
    }
    

    Welchen Vorteil siehst Du in der Benutzung des Zeigers?

    Er zeigt ja noch zusätzlich den String ab Zeichen 3 an (nicht nur Zeichen 3 selbst). Abgesehen davon ist der Zeiger für Zeichen 3 only natürlich unnötig und vor allem unnötig verwirrend für theralph.



  • "Scanne die dritte Stelle" habe ich so (wahrscheinlich falsch-) interpretiert, dass er sowohl das dritte Zeichen als auch die Zeichenkette ab dieser Position evtl. verwenden möchte.

    Naja, seis drum.


Anmelden zum Antworten