Keine Ausgabe mit puts



  • Hi!

    Ich arbeite gerade an einem einfachen Verschlüsselungsprogramm. Leider bekommen ich bei zwei Funktionen keine Ausgabe. Hier mein Code:

    #include <stdio.h>
    #include <stdlib.h>
    
    int verschluesseln();
    int entschluesseln();
    char zeichen[26] = "abcdefghijklmnopqrstuvwxyz";
    char wort[50] = "";
    
    int main(int argc, char *argv[])
    {
      int auswahl;  
      // Auswahlmenü
      printf(" ---------------------- \n");
      printf("| Was moechten Sie tun?|\n");
      printf("| 1 - Verschluesseln   |\n");
      printf("| 2 - Entschlusseln    |\n");
      printf("| 0 - Beenden          |\n");
      printf(" ---------------------- \n");
      scanf("%d", &auswahl);
      switch (auswahl)
      {
        case 1:
            verschluesseln();
        case 2:
            entschluesseln();    
        case 0:
            ;    
      }       
      system("PAUSE");	
      return 0;
    }
    
    int verschluesseln()
    {      
      int schluessel,i,j,laenge = 0;
      printf("Bitte geben Sie das zu verschluesselnde Wort ein: ");
      fflush(stdin);
      gets(wort);
      printf("Bitte geben Sie den Schluessel ein: ");
      scanf("%d", &schluessel);
    
      // Schleife zur Bestimmung der Länge des Wortes
      for(i=0;i<=50;i++)
      {
            if(wort[i]=='\0')
            {
                laenge=i;
                break;
            }
      }
    
      // Schleife zur Verschlüsselung
      for(i=0;i<laenge;i++)
      {
            for(j=0;j<26;j++)
            {
                if(wort[i]==zeichen[j])
                {
                    wort[i]=zeichen[j+schluessel];
                }
            }
      }
      fflush(stdin);
      puts(wort);       
    }
    
    int entschluesseln()
    {
      int schluessel,i,j,laenge = 0;
      printf("Bitte geben Sie das zu entschluesselnde Wort ein: ");
      fflush(stdin);
      gets(wort);
      printf("Bitte geben Sie den Schluessel ein: ");
      scanf("%d", &schluessel);
    
      // Schleife zur Bestimmung der Länge des Wortes
      for(i=0;i<=50;i++)
      {
            if(wort[i]=='\0')
            {
                laenge=i;
                break;
            }
      }
    
      // Schleife zur Verschlüsselung
      for(i=0;i<laenge;i++)
      {
            for(j=0;j<26;j++)
            {
                if(wort[i]==zeichen[j])
                {
                    wort[i]=zeichen[j-schluessel];
                }
            }
      }
      puts(wort);   
    }
    

    jeweils bei den funktionen verschluesseln und entschluesseln krieg ich keine ausgabe. was kann ich tun?



  • Lass dir Zwischenergebnisse anzeigen. Dann stellst du fest, wo ( und vielleicht auch warum ) deine Ausgabe verloren geht.



  • deine 2 funktionen sind nicht vom typ int sondern void...(ansonst benötigen sie einen rückgabe wert)



  • fflush(stdin) erzeugt undefiniertes Verhalten. Man darf Inputstreams nicht flushen.

    Statt gets lieber fgets benutzen. Sonst kanns zu Pufferüberläufen kommen.



  • j+schluessel

    muss innerhalb der Arraygrenze gehalten werden, das kannst du mit dem Modulo-Operator erreichen.
    Deine Schleife zur Verschlüsselung musst du noch einmal überdenken.
    Es werden alle Buchstaben zum höchsten 'hinausgedrängt'.
    Ausserdem sollten auch Grossbuchstaben und eventuell Zahlen in Betracht gezogen werden.
    Dafür gibt es die Funktionen isalpha, isalnum.

    Die Schleife zur Bestimmung der Länge des Wortes solltest du auch überdenken.
    Was ist mit Wörtern mit einer Länge > 50 ?
    Du kannst mit strlen die Wortlänge ermitteln.



  • wenn du die länge des wortes unbedingt selbst zählen willst ginge auch das:

    int mystrlen(char *wert)
    {   
        int i=0;
        while(wert[i] != '\0') //einfaches "Buchstaben" zählen
            i++;
        return i;
    }
    

Log in to reply