Hallo liebe Gemeinde,
ich hab eine Frage bezüglich meines Programms. Mein Prof. hat die Aufgabe gestellt ein vorhandenes Programm zu ersetzen. Dabei gehts darum alle Vokale aus dem Lied "Drei Chinesen mit dem Kontrabass" jeweils mit "a" "e" "i" "o" und "u" zu ersetzen und auszugeben. Aufgrund das mir der Ablauf nicht ganz klar war habe ich das Programm abgespeckt nachgebaut. Nur in einem Punkt komm ich nicht weiter. In der Funtktion Void Ausgabe wird die eingelesene Zeichenkette übergeben. Von dort aus wird diese in die Funktion vokaländern übergeben und der Rückgabewert soll ausgegeben werden. Ich hab das Programm auch ohne eine Funktion nachgebaut und das ersetzen der Vokale funktioniert. Es wäre sehr hilfreich wenn mir jemand einen Tipp geben könnte was ich falsch mache.
[img]C:\Users\Jupp\Desktop\Programm[/img]
Hilfe bei Programm "Ersetzen der Vokale"
Re: Hilfe bei Programm "Ersetzen der Vokale"
Hallo elpaffron!
Ich fürchte beim Upload deines Codes ist etwas schief gelaufen. Hast du versucht ein Bild hochzuladen? Bitte poste ihn direkt hier als Text (nicht als Bild).
Mir ist das Problem noch nicht ganz klar:
Ich fürchte beim Upload deines Codes ist etwas schief gelaufen. Hast du versucht ein Bild hochzuladen? Bitte poste ihn direkt hier als Text (nicht als Bild).
Mir ist das Problem noch nicht ganz klar:
Funktionen helfen dir dabei, dein Programm zu strukturieren. Das ist vor allem bei größeren Programmen sehr sinnvoll, aber kein Zwang.
Re: Hilfe bei Programm "Ersetzen der Vokale"
Hi Sorry irgendwie ist da was schief gelaufen. Der Code ist wie folgt:
Mein Problem ist bei der Funktion Ausgabe und VokalÄndern. Was für einen Rückgabewert benötige ich in der Funktion "Vokaländern"
Ich denke das dort mein Problem liegt, weil er nix sinnvolles in die Variable text schreibt.
Danke und gruß
el paffron
Code: Alles auswählen
int Eingabe(char* text) // Eingabe vom Satz
{
printf("Bitte geben Sie eine Zeichenkette ein: (max. 100 Zeichen)");
fgets(text, 100, stdin);
return text;
}
char* vokalAendern(char* zeichenkette, char vokal) // Umwandeln der Vokale
{
while (*zeichenkette != '\0')
{
if (*zeichenkette == 'a' || *zeichenkette == 'e' || *zeichenkette == 'i' || *zeichenkette == 'o' || *zeichenkette == 'u')
{
*zeichenkette = vokal;
}
zeichenkette++;
}
}
void Ausgabe(char* zeichenkette) // Ausgabe der Zeichenkette mit ersetzen des Vokals
{
char* text;
printf("Der eingebene Text lautet: %s\n", zeichenkette);
printf("\nStrophen: \n");
text = vokalAendern(zeichenkette, 'a');
printf("%s", text);
text = vokalAendern(zeichenkette, 'e');
printf("%s", text);
text = vokalAendern(zeichenkette, 'i');
printf("%s",text);
text = vokalAendern(zeichenkette, 'o');
printf("%s", text);
text = vokalAendern(zeichenkette, 'u');
printf("%s", text);
}
int main(void) // Hauptprogramm
{
char eingabestring[100];
char *text = eingabestring;
text = Eingabe(eingabestring);
Ausgabe(eingabestring);
return 0;
}
Ich denke das dort mein Problem liegt, weil er nix sinnvolles in die Variable text schreibt.
Danke und gruß
el paffron
Re: Hilfe bei Programm "Ersetzen der Vokale"
Du übergibst an "vokalAendern" einen Zeiger mit dem Namen "zeichenkette". Dieser verweist auf einen Speicherbereich, den du innerhalb deiner Funktion veränderst:
Eigentlich musst du gar nichts mehr zurückgeben, du hast den angegebenen Speicherbereich schon verändert und kannst ihn außerhalb der Funktion weiter verwenden.
Also z.B. folgendermaßen:
Ähnlich sieht es übrigens bei der Funktion "Eingabe" aus. Du ignorierst den Rückgabewert sogar:
"text" wird zwar zugewiesen, aber nicht verwendet. "Eingabe" könnte auch einfach "void" als Rückgabetyp haben. "int" ist übrigens auf jeden Fall unpassend, aktuell wäre "char *" der richtige Typ.
Ist die Verwendung von Rückgabewerten verpflichtend? Mir fallen 3 Varianten zur Umsetzung ein:
1) Du könntest in der jetzigen Variante natürlich den ursprünglichen Wert des Eingabeparameters zwischenspeichern und zurückgeben:
Wirklich sinnvoll ist das allerdings nicht. Die aufrufende Funktion weiß ja bereits, was übergeben wurde.
2) Falls du mit dynamischer Speicherverwaltung vertraut bist, könntest du innerhalb der Funktion neuen Speicher anfordern und das Ergebnis dort hinein schreiben.
3) Die Funktion hat einen eigenen statischen Speicherbereich (ein Array mit dem Attribut "static"), der beschrieben und zurückgegeben wird.
Code: Alles auswählen
*zeichenkette = vokal;
Also z.B. folgendermaßen:
Code: Alles auswählen
vokalAendern(zeichenkette, 'a');
printf("%s", zeichenkette);
Code: Alles auswählen
text = Eingabe(eingabestring);
Ausgabe(eingabestring);
Ist die Verwendung von Rückgabewerten verpflichtend? Mir fallen 3 Varianten zur Umsetzung ein:
1) Du könntest in der jetzigen Variante natürlich den ursprünglichen Wert des Eingabeparameters zwischenspeichern und zurückgeben:
Code: Alles auswählen
char* vokalAendern(char* zeichenkette, char vokal) // Umwandeln der Vokale
{
char *ergebnis = zeichenkette;
while (*zeichenkette != '\0')
{
// ...
}
return ergebnis;
}
2) Falls du mit dynamischer Speicherverwaltung vertraut bist, könntest du innerhalb der Funktion neuen Speicher anfordern und das Ergebnis dort hinein schreiben.
3) Die Funktion hat einen eigenen statischen Speicherbereich (ein Array mit dem Attribut "static"), der beschrieben und zurückgegeben wird.