Eingabe rückwärts ausgeben in C?
Guten Tag,
Ich will ein Programm schreiben, welches ein Wort einlesen kann (mittels scanf) und rückwärts ausgeben kann. Die maximale Zeichenlänge soll 40 sein. Ein Beispiel: Hallo -> ollaH
Mit meinem bisherigen Programm provoziere ich immer einen Laufzeitfehler. Kann mir jemand sagen wie ich das Programm zum laufen bringe?
Vielen Dank im Voraus!
PS: Bin ein absoluter Anfänger (seit ca 48h :))
#include <stdio.h>
int main(int argc, char *argv[]) {
char Eingabe[40], Ausgabe[40];
int i, j;
for(i=0; i<40; i++) {
Eingabe[i] = 32;
Ausgabe[i] = 32;
}
scanf("%s", &Eingabe[0]);
for(i=0; i<40; i++) {
Ausgabe[40-i] = Eingabe[i];
}
printf("%s", Ausgabe);
return 0;
}
3 Antworten
Dein Array hat die Länge 40, das heißt, es gibt Indizes von 0-39. Mit Ausgabe[40] erzeugst du einen nicht erlaubten Speicherzugriff.
Klar, logisch, vielen Dank! Immer diese kleinen Leichtsinnsfehler -.- Ich habe nur ein kleines Problem noch: Die Ausgabe ist noch ein Hindernis, denn die ist nur voller Leerzeichen (vmtl aufgrund der Leerzeichen-Initialisierung oben, aber gibt es da einen Trick das zu umgehen?).
Ausgabe[40-i]
Ausgabe enthält 40 Elemente von 0 bis 39. Schreibe nicht in das 40.ste!
Die Nutzer "mjutu" und "Gehilfling" haben recht.
Hab dein Programm angepasst:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
char Eingabe[40], Ausgabe[40];
int i, j;
scanf("%s", Eingabe);
int n = strlen(Eingabe);
for(i=0; i<n; i++) {
Ausgabe[n-1-i] = Eingabe[i];
}
printf("%s", Ausgabe);
return 0;
}
Ja, gibt es. Lies mal in der Dokumentation zur scanf() Funktion nach:
Komme irgendwie imemr noch auf keinen grünen Zweig. Irgendwas übersehe ich:D
scanf liefert als Return wert die Anzahl gelesenen Zeichen zurück.
Stimmt, nur wenn strcpy() genutzt wird, geschieht dies automatisch.
Also quasi die stringlength Funktion ersetzen? Aber wie kann ich dann den Return-Wert auslesen? Tut mir Leid für die vielen Fragen hatte noch nie was mit Coden am Hut und evrsuche es mir näher zu bringen:D
Du schreibst halt sowas wie
n = scanf("%s", Eingabe);
Dann hast du in der Variable n die Länge der Eingabe stehen.
Gibts auch einen Weg nur mit der stdio.h Bibliothek? Das wäre super:)