String über Tatstatur eingeben?



  • So hier ist meine Lösung, ich hoffe ich hab nicht vergessen unwichtiges wegzulöschen, hatte die Variablen nur schon deklariert, da ich sie später noch brauche.

    Viele Grüße
    Kittxxx

    # include <stdio.h>
    # include <string.h>
    # include <stdlib.h>
    
    # define MAX 128
    
    char vBuf[MAX];
    
    void Puffer_leeren(void)
    {
        int ch;
        while ((ch = getchar()) != '\n');
    }
    
    int main(int argc, char *argv[])
    {
      char  auswahl, *a;
      char *name, *vname, *telnr;
    
       printf("Telefonbuch\n");
       printf("1 - Neuer Telefonbucheintag\n");
       printf("q - beenden\n");
       puts("");
       printf("Bitte einen Menuepunkt auswaehlen: ");
       fgets(vBuf, 2, stdin); auswahl=vBuf[0]; memset(vBuf,0,auswahl);
    
      switch (auswahl)
      {
       case '1':{
                  //system clear
                  printf("Neuer Telefonbucheintrag\n");
                  puts("------------------------------");
    
                  printf("Bitte Nachname eingeben: ");
                  name=malloc(sizeof(name));
                  fgets(name,sizeof(name),stdin);
                  memset(name,0, sizeof(name)-1);
    
                  Puffer_leeren();
    
                  printf("Bitte Vorname eingeben: ");
                  vname=malloc(sizeof(vname));
                  fgets(vname,sizeof(vname),stdin);
                  memset(vname,0, sizeof(vname)-1);
    
                  Puffer_leeren();
    
                  printf("Bitte Telefonnummer eingeben: ");
                  telnr=malloc(sizeof(telnr));
                  fgets(telnr,sizeof(telnr),stdin);
                  memset(telnr,0, sizeof(telnr)-1);
    
                  Puffer_leeren();
                } break;
       case 'q':{
                  printf("Soll das Programm beendet werden? ja/nein: ");
                  a=malloc(sizeof(a));
                  fgets(a,sizeof(a),stdin); 
                  memset(a,0,sizeof(a)-1);
                  Puffer_leeren();
                  if(a ='ja') exit(-1);
                 // if(a='nein') printf("weiter\n");
                }break; 
       default: {
                 printf("Bitte 1, 2, 3, 4, 5, 6, 7, oder q auswaehlen\n");
                } break;
       }
    return 0;
    }
    
    /* Ausgabe
    Telefonbuch
    1 - Neuer Telefonbucheintag
    q - beenden
    
    Bitte einen Menuepunkt auswaehlen: 1
    Neuer Telefonbucheintrag
    ------------------------------
    Bitte Nachname eingeben: Muster
    Bitte Vorname eingeben: Max
    Bitte Telefonnummer eingeben: 1234
    */
    


  • und das läuft? hoffe dir ist bewusst, dass du immer nur speicher für nen zeiger reservierst da passen gelegentlich nur 4char rein... + einrückung usw. hab ich dann nicht weitergelesen!



  • wenn deine Puffer_leeren() funktion mal auf ne '\0' trifft sag ich nur wohoo 🤡



  • icke muß kotzen

    if(a ='ja')
    


  • no_c0der schrieb:

    wenn deine Puffer_leeren() funktion mal auf ne '\0' trifft sag ich nur wohoo 🤡

    sollte natürlich statt '\0' ne EOF aka (-1) sein 🙄



  • Kittxxx schrieb:

    name=malloc(sizeof(name));
                  fgets(name,sizeof(name),stdin);
                  memset(name,0, sizeof(name)-1);
    

    sizeof macht für Zeiger in diesem Zusammenhang keinen Sinn und ist falsch.



  • Ja das läuft bis jetzt, ich hab leider noch nicht so viel Ahnung von C, aber versuchs eben zu lernen.
    Wieso ist das sizeof falsch und wie könnte man das anders machen?
    Und was ist an

    if(a='ja')
    

    falsch? Ich weiß, dass die ja/nein-Abfrage noch nicht so ganz funktiniert.



  • hast das schon mal versucht selbst zu lösen? nein! was gibt sizeof zurück und wieso ist strcmp(x,y) so nicht möglich 😋



  • Vielleicht ein Hinweis zu deinem

    if(a='ja')
    

    Du verwendest hier einen falschen Operator. "=" wird für Zuweisungen verwendet, während "==" der Vergleichsoperator ist, den du eigentlich verwenden wolltest.

    Die Puffer_leeren kann sicherheitshalber noch erweitert werden:

    while (((c = getchar()) != EOF) && (c != '\n'))
    

    Die anderen Fehler wurden schon angesprochen. Lass dich nicht entmutigen! Das wird schon 🙂

    Viele Grüße,
    MaBa



  • MaBa schrieb:

    Vielleicht ein Hinweis zu deinem

    if(a='ja')
    

    Du verwendest hier einen falschen Operator. "=" wird für Zuweisungen verwendet, während "==" der Vergleichsoperator ist, den du eigentlich verwenden wolltest.

    so klappt das in ansi c aber nicht!!!



  • sizeof gibt den Speicherplatz der Variable in Byte zurück und ich kann strcmp nicht verwenden, weil die Größe ja immer gleich ist. Vielleicht bin ich grad auch komplett auf dem Holzweg.
    Die ja/nein-Abfrage klappt nicht, aber da überleg ich mir grad ne andre Lösung.
    Vielen Dank für die Hinweise.



  • kein plan von c? schrieb:

    if(a[0]=='j'&&a[1]=='a')
    

Anmelden zum Antworten