luii Geschrieben 23. September 2006 Geschrieben 23. September 2006 Hallo, ich habe als Aufgabe bekommen ein einfaches C Programm zu schreiben ( nicht c++! ). Nun komme ich aber nicht wirklich weiter. Ich hoffe es kann mir jemand helfen. 1. Aufgabe: Innerhalb von main() wird ein text eingegeben. Der text wird an eine funktion übergeben. Die funktion soll die textlänge ermitteln und anzeigen. Nun habe ich das ganze so gemacht, was aber falsch ist, da wir keine arays nutzen sollen. #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { char satz[80]; printf("\nBitte geben sie einen Satz ein\n"); gets(satz); printf("\n%s",satz); printf("\nDer satz besteht aus %i Zeichen.",strlen(satz)); system("PAUSE"); return 0; } Die 2. aufgabe ist wie in der 1. aufgabe nur das die textöänge an main() zurückgegeben und auch dort angezeigt werden soll. Und die 3. aufgabe ist innerhalb einer funktion wird ein text eingeben. Dieser text wird an main() zurückgegeben und hier angezeigt. Kann mir bei diesen 3 Aufgaben irgendjemand helfen ? Zitieren
Guybrush Threepwood Geschrieben 23. September 2006 Geschrieben 23. September 2006 Wodrin willst du den Text denn speichern wenn nicht in einem Array? Zitieren
luii Geschrieben 23. September 2006 Autor Geschrieben 23. September 2006 Mh weis ich auch nicht so genau, ist es nicht anders möglich ? Zitieren
Guybrush Threepwood Geschrieben 23. September 2006 Geschrieben 23. September 2006 nein und du solltest schon genauer schreiben womit du probleme hast bei den aufgaben Zitieren
luii Geschrieben 23. September 2006 Autor Geschrieben 23. September 2006 Mein Problem ist ganz einfach, dass ich nicht wirklich den "befehl" weis, den ich fuer die Funktion brauche. Ich hab versucht über google was zu finden aber dort hab ich auch keine Hilfe gefunden. Zitieren
schmalbert Geschrieben 23. September 2006 Geschrieben 23. September 2006 hallo luii, um das problem zu begreifen, ist das alles etwas sehr schwammig, was du schreibst. -Zitat- 1. Aufgabe: Innerhalb von main() wird ein text eingegeben. Der text wird an eine funktion übergeben. Die funktion soll die textlänge ermitteln und anzeigen. -/Zitat- in deiner lösung wird in main() ein text von der standardeingabe in ein zuvor definiertes character-array eingelesen. der pointer auf das array wird an eine funktion (strlen()) übergeben, die die anzahl der zeichen zurück liefert. der rückgabewert (die anzahl der zeichen) wird in main() mit printf() ausgegeben. -Zitat- Die 2. aufgabe ist wie in der 1. aufgabe nur das die textöänge an main() zurückgegeben und auch dort angezeigt werden soll. -/Zitat- wo ist der unterschied? -Zitat- Und die 3. aufgabe ist innerhalb einer funktion wird ein text eingeben. Dieser text wird an main() zurückgegeben und hier angezeigt. -/Zitat- falls ich das richtig verstanden habe, wäre das eine möglichkeit: du definierst (wie gehabt) in main() ein char-array und gibst deiner zu definierenden funktion den pointer auf dieses array als argument mit, sodass in dieser funktion per gets() in dieses array hineinkopiert werden kann. /* code */ /* ..*/ char* myGets(char * cstr) { printf("Bitte geben sie einen Satz ein: \t"); gets(cstr); return cstr; } /* ..*/ int main(void) { char satz[80]; printf("\nDer satz \"%s\" besteht aus %i Zeichen.\n", myGets(satz), strlen(satz)); return 0; } /* end code */ hth ms Zitieren
schmalbert Geschrieben 23. September 2006 Geschrieben 23. September 2006 ups, hatte seiteneffekt nicht berücksichtigt; hier der korrekte vorschlag: char* myGets(char * cstr) { printf("Bitte geben sie einen Satz ein: \t"); gets(cstr); sprintf(cstr,"Der satz besteht aus %i Zeichen.", strlen(cstr)); return cstr; } /* ..*/ int main(void) { char satz[80]; printf("%s\n", myGets(satz)); return 0; } Zitieren
pit030771 Geschrieben 24. September 2006 Geschrieben 24. September 2006 ich glaube mal nicht das hier die funktion strlen benutzt werden darf, wenn das eine aufgabe aus dem unterricht ist. ich verstehe es so das von aufgabe 1 eine eigen funktion definiert werden muss, welche den string bearbeite und die zeichen darin zählt. es geht bei den aufgaben darum, dass das prinzp der funktionsparameter verstanden wird. wie empfängt eine fumktion werte wie kann ich werte zurückgeben so seh ich das. berichtigt mich wenn ich was falsch verstehe. Zitieren
schmalbert Geschrieben 24. September 2006 Geschrieben 24. September 2006 wenn strlen() nicht benutzt werden soll,formuliere doch in der funktion einfach eine schleife, die das zählen der zeichen übernimmt. ersetze strlen() durch die variable, die durch die vorangegangene schleife die anzahl der zeichen in dem c-string enthält. einen c-string kannst du ganz einfach durchiterieren und mitzählen bis ein zeichen mit dem wert 0 kommt ( char ende=0; ) - dann hast du in der zählvariable die anzahl der zeichen im string (vorausgesetzt, die zählvariable wurde korrekt initialisiert). was das andere angeht, scheine ich nicht zu verstehen, worums überhaupt geht. am besten, du postest deine aufgabe direkt hier herein. Zitieren
pit030771 Geschrieben 24. September 2006 Geschrieben 24. September 2006 wenn strlen() nicht benutzt werden soll,formuliere doch in der funktion einfach eine schleife, die das zählen der zeichen übernimmt. ersetze strlen() durch die variable, die durch die vorangegangene schleife die anzahl der zeichen in dem c-string enthält. einen c-string kannst du ganz einfach durchiterieren und mitzählen bis ein zeichen mit dem wert 0 kommt ( char ende=0; ) - dann hast du in der zählvariable die anzahl der zeichen im string (vorausgesetzt, die zählvariable wurde korrekt initialisiert). was das andere angeht, scheine ich nicht zu verstehen, worums überhaupt geht. am besten, du postest deine aufgabe direkt hier herein. es geht doch nicht um mich. ich kann das. es geht um den, der den thread eröffnet hat. da hast du glaub ich was falsch verstanden. ich wollte damit nur sagen, dass ich die aufgaben die OBEN aufgeführt sind so verstanden habe. Zitieren
schmalbert Geschrieben 24. September 2006 Geschrieben 24. September 2006 lol - stimmt aber vielleicht helfen die infos luii trotzdem weiter. ne genauere aufgabenstellung wäre jedenfalls hilfreich; ohne konkrete frage ist eine hilfestellung schlecht möglich. Zitieren
pit030771 Geschrieben 24. September 2006 Geschrieben 24. September 2006 da geb ich dir recht. aber ich glaube schon das es so ist wie ich schrieb. weil das haben wir auch gemacht in ae. einfach diese funktionen nachprogrammieren um zu verstehen was da passiert. denn erst dann kann ich sie auch richtig anwenden. Zitieren
luii Geschrieben 24. September 2006 Autor Geschrieben 24. September 2006 Ok, danke erstmal. Eine andere Aufgabenstellung als die oben habe ich auch nicht auf meinem Blatt stehen. Wir machen C nun erst seit ein paar Wochen und ich weis wirklich nicht wie ich an die Aufgaben gehen soll. Entweder unser Lehrer erklaert schlecht oder ich bin einfach zu blöd dafür. Wenn ihr es könnt und es nicht schwer ist, könnt ihr mir nicht schnell den code für das bzw die Programme geben ? Ich werd den Lehrer dann nochmal drauf ansprechen und ihn bitten die Sachen nocheinmal durchzusprechen. Zitieren
pit030771 Geschrieben 24. September 2006 Geschrieben 24. September 2006 Ok, danke erstmal. Eine andere Aufgabenstellung als die oben habe ich auch nicht auf meinem Blatt stehen. Wir machen C nun erst seit ein paar Wochen und ich weis wirklich nicht wie ich an die Aufgaben gehen soll. Entweder unser Lehrer erklaert schlecht oder ich bin einfach zu blöd dafür. Wenn ihr es könnt und es nicht schwer ist, könnt ihr mir nicht schnell den code für das bzw die Programme geben ? Ich werd den Lehrer dann nochmal drauf ansprechen und ihn bitten die Sachen nocheinmal durchzusprechen. du wirst hier keine fertigen programm bekommen. wichtig ist das du weisst was du machen willst und hier dein problem konkretisierst. dein lehrer wird nicht schlecht erklären, er wird nur etwas eigeninitiative erwarten. es geht letztendlich nicht um die programmiersprache, als vielmehr um die logik die dahinter steckt. ihr werdet doch wohl paps oder dtruktogramme besprochen haben, dann mach dir dazu erst mal ne logik. denn erst wenn du weisst wie es aussehen soll kannst du das auch in einen prgrammiersprache umsetzten. 1. Aufgabe: Innerhalb von main() wird ein text eingegeben. Der text wird an eine funktion übergeben. Die funktion soll die textlänge ermitteln und anzeigen. vieleicht lösen wir erst mal aufgabe 1: in aufgabe 1 soll ein string eingelesen werden. dieser soll an eine funktion übergeben werden. in der funktion soll die länge ermittelt werden UND auch angezeigt werden(alles in der funktion). das macht die strlen funtion definitiv nicht, deshalb ist dein ansatz falsch. du musst eine funtion definieren, welche einen string (char[] Array) empfängt, dieses array durch suchts du bis du das ende findest(ein char array endet immer mitt dem wer '\0'). danch gibst du einfach den wert der zähl variable-1 aus. so jetzt google mal nach wie man werte an funktionen übergiebt und dann versuchs noch mal und poste deine ergebnisse. hier im forum findet man auch sehr viel dazu, benutz mal die erweiterte suche. grüße pit Zitieren
schmalbert Geschrieben 24. September 2006 Geschrieben 24. September 2006 vorausgesetzt, man hätte hier eine klare aufgabenstellung, würde ich gerne hilfestellung geben. auch wenn ich weiter oben konkreten code gepostet habe, wäre mit einer komplettlösung hier eigentlich keinem geholfen. wenn es ein teil dieser aufgabe ist, zeichen in einem c-string zu zählen, dann implementiere doch einmal eine solche funktion (hinweise dazu sind weiter oben). eine funktion, die die länge eines strings ermitteln soll (analog zu strlen()), braucht als argument zb. einen zeiger auf diesen string (das ist im obigen fall der bezeichner des char-arrays) und als rückgabewert zB einen integer; dies ist vermutl. 2) und die signatur/prototyp würde zB so aussehen: int myStrlen(const char *); zur 3) soll diese funktion vermutlich derart erweitert werden, dass sie auch für das einlesen von der standardeingabe zuständig ist und anstelle der anzahl der zeichen eine zeichenkette mit dem ausgabetext beinhaltet. hierzu siehe mein codebeispiel oben. bei dieser variante wird das char-array in main() definiert und der zeiger dieses arrays wird der funktion übergeben, sodass diese auf den ihnhalt zugreifen kann (modifizieren in dem fall). eigentlich müsste diese funktion garnichts zurück geben, da mit dem übergeben der _referenz_ der inhalt, der durch das char-array bezeichnet ist, direkt manipulierbar ist (call by reference); mögliche signatur: void myStrlen(const char*); in dem fall würde beim aufruf aus main() heraus als argument das deklarierte array angegeben werden. in der funktion würde dieses array dann mit dem ergebnistext (der vermutlich in main() ausgegeben werden soll) beschrieben werden (siehe auch hierzu codebeisp. oben). Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.