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 einchar**
, 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
undargv
vorkommt, ändern (oder entfernen)argv
undline
sind unterschiedliche Typen.
argv[i]
undline
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.