Palindrom-Test



  • Hallo Zusammen,

    Das folgende Programm soll nach der Eingabe eines Wortes herausfinden,
    ob es ein palindrom ist oder nicht.
    Der ideone-compiler zeigt mir zwar keinen Fehler an, aber er gibt auch nichts aus.
    Das Programm muss mit 2 Funktionen laufen, die Palindrom-funktion soll so aufgebaut sein(ohne weitere Variablen):

    int palindrom(char line[] {
    int i, length;
    ....

    Kann mir jemand helfen woran es liegt dass das Programm nichts ausgibt?

    #include <stdio.h>
    
    int laenge(char line[]) {
       int i=0;
    
       while (line[i] != '\0') i++;
    
       return i;
    }
    
    int palindrom(char line[]) {
       int i,length;
    
       length = laenge(line);
    
       /* die Schleife läuft bis zur Wortmitte line[l/2];
          falls length ungerade ist, wird das mittlere Element nicht überprüft
          (ist auch nicht nötig) 
        */
       for (i=0; i<length/2; i++) 
          /* sobald ein falsches Paar gefunden ist, ist schon gewiss, dass
             das Wort kein Palindrom ist => return 0 */  
          if ( tolower(line[i]) != tolower(line[length-i-1])) 
             return(0);
    
       /* es wurde kein falsches Paar gefunden => line ist Palindrom! */
       return(1);
    }
    
    int main(int argc, char *argv[]) {
       int i;
    
    printf("\nGeben Sie bitte das zu prüfende Wort ein:");
    scanf("%c", &argv);
    
       for (i=1; i<argc; i++) {
          printf("Das Wort %s ", argv[i]);
          if ( palindrom(argv[i]) )
             printf("ist ein Palindrom\n");
          else
             printf("ist kein Palindrom\n");
       }
    }
    

    Danke!



  • ein.neuling schrieb:

    Das folgende Programm soll nach der Eingabe eines Wortes herausfinden,
    ob es ein palindrom ist oder nicht.
    Der ideone-compiler zeigt mir zwar keinen Fehler an, aber er gibt auch nichts aus.

    Nimm c99strict als Sprache - nicht C.



  • Zeile 34 ist Müll.

    Bei scanf ist %c zum einlesen von einem Zeichen da.

    argv ist ein char** , von dem du noch die Adresse übergibst (also ein char***). Du brauchst bei %c und auch bei %c einen char*

    Zudem gehört dir der Speicher auf den argv (und auch argv[x]) zeigt auch nicht und darum dafst du ihn auch nicht beschreiben.



  • Nimm c99strict als Sprache - nicht C.

    ok, mach ich ab jetzt.

    Zeile 34 ist Müll.

    Bei scanf ist %c zum einlesen von einem Zeichen da.

    argv ist ein char**, von dem du noch die Adresse übergibst (also ein char***). Du brauchst bei %c und auch bei %c einen char*

    Zudem gehört dir der Speicher auf den argv (und auch argv[x]) zeigt auch nicht und darum dafst du ihn auch nicht beschreiben.

    Das versteh ich noch nicht ganz,
    wie kann ich das Ganze dann einlesen/ausgeben?



  • Du musst einen eigenen Puffer haben in den Du einliest. char input[30]; o.ä.

    Oder ist die Aufgabe, dass Du die zu prüfenden Wörter in der Kommandozeile eingeben sollst? Also, z.b.

    ./palindrom anna lagerregal topf
    


  • Du musst einen eigenen Puffer haben in den Du einliest. char input[30]; o.ä.

    Oder ist die Aufgabe, dass Du die zu prüfenden Wörter in der Kommandozeile eingeben sollst?

    Nein, nicht in der Kommandozeile.
    Kann ich char line[63] als Puffer nehmen,
    was muss ich dann noch in der Funktion selber ändern?
    Den Begriff Puffer habe ich bisher noch nicht gehört.



  • ein.neuling schrieb:

    Nein, nicht in der Kommandozeile.

    Dann brauchst du argc und argv nicht.

    ein.neuling schrieb:

    Kann ich char line[63] als Puffer nehmen,

    Ja

    ein.neuling schrieb:

    was muss ich dann noch in der Funktion selber ändern?

    Die Zeilen, in denen argc und argv vorkommt, ändern (oder entfernen)

    ⚠ argv und line sind unterschiedliche Typen.
    💡 argv[i] und line sind von vergleichbaren Typen.

    ein.neuling schrieb:

    Den Begriff Puffer habe ich bisher noch nicht gehört.

    Noch nie? Nirgendwo anders?
    Dann frag mal die deutsche Wikipedia.



  • danke, dann werd ich das ändern.
    Mit "nicht gehört" habe ich gemeint dass ich den Begriff in der Vorlesung/Übung nicht gehört habe.



  • ein.neuling schrieb:

    Mit "nicht gehört" habe ich gemeint dass ich den Begriff in der Vorlesung/Übung nicht gehört habe.

    Das können ja noch nicht so viele gewesen sein.
    Es ist aber auch kein spezieller Begriff aus der Informatik.


Anmelden zum Antworten