Klotzkopp Geschrieben 12. Dezember 2008 Geschrieben 12. Dezember 2008 Wieso schreiben? Ich lese ja aus.Die Funktion gets liest von der Standardeingabe und schreibt in den Puffer, den du ihr übergibst. zweiter Durchlauf: c = ? 'a' oder 'b'?Warum sollte beim zweiten scanf-Aufruf das erste Zeichen nochmal gelesen werden? Zitieren
TDM Geschrieben 12. Dezember 2008 Geschrieben 12. Dezember 2008 Die Funktion gets liest von der Standardeingabe und schreibt in den Puffer, den du ihr übergibst. hm, ok. Dann nur *(stdin->_ptr). Warum sollte beim zweiten scanf-Aufruf das erste Zeichen nochmal gelesen werden? Weil ich nicht weiß, ob sich scanf merkt, wo es zuletzt bei stdin gelesen hat. Wenns so ist, dann könnte man das ganze ja auch ohne Rekursion und nur mit Schleifen machen. :floet: Zitieren
Klotzkopp Geschrieben 12. Dezember 2008 Geschrieben 12. Dezember 2008 hm, ok. Dann nur *(stdin->_ptr).Wie gesagt, es ist nicht festgelegt, welche Member die FILE-Struktur hat. Weil ich nicht weiß, ob sich scanf merkt, wo es zuletzt bei stdin gelesen hat.Na sicher. Wenns so ist, dann könnte man das ganze ja auch ohne Rekursion und nur mit Schleifen machen. :floet:Bedenke aber, dass du laut Aufgabenstellung kein Array benutzen darfst Zitieren
TDM Geschrieben 12. Dezember 2008 Geschrieben 12. Dezember 2008 Bedenke aber, dass du laut Aufgabenstellung kein Array benutzen darfst fseek? oder ist das wieder böse (unportabel)? Zitieren
Klotzkopp Geschrieben 12. Dezember 2008 Geschrieben 12. Dezember 2008 fseek?Gleiches Problem wie bei rewind. Zitieren
Wodar Hospur Geschrieben 12. Dezember 2008 Geschrieben 12. Dezember 2008 Wie weit geht die Definition von Array char* reverse(char* input,int length) { char* output = malloc(sizeof(char)*length); for(int i=length;i>=0;i--) { *(output+(sizeof(char)*(length-i))) = *(input+(sizeof(char)*i)); } return output; } Zitieren
Klotzkopp Geschrieben 12. Dezember 2008 Geschrieben 12. Dezember 2008 Wie weit geht die Definition von Array Ich denke, zumindest soweit, dass man keinen zusammenhängenden Speicher mit malloc holen darf. Außerdem fehlt die Eingabe Zitieren
Wodar Hospur Geschrieben 12. Dezember 2008 Geschrieben 12. Dezember 2008 Kein Malloc #include "stdio.h" #include "stdlib.h" int main(void) { char* input = "abc"; int length = 2; printf("Input: %s",input); printf("\n Output: "); for(int i=length;i>=0;i--) { printf("%c",*(input+(sizeof(char)*i))); } printf("\n"); return 0; } Zitieren
Klotzkopp Geschrieben 12. Dezember 2008 Geschrieben 12. Dezember 2008 Kein Malloc Aber nur weil du deine Variable "input" nennst, hast du noch lange keine Eingabe. Zitieren
TDM Geschrieben 12. Dezember 2008 Geschrieben 12. Dezember 2008 Wie weit geht die Definition von Array strings/long pointer/char pointer sind im Endeffekt Arrays. bzw. was wenn ich in deinem Beispiel 3 Zeichen eingeb?! Zitieren
Wodar Hospur Geschrieben 12. Dezember 2008 Geschrieben 12. Dezember 2008 Structs auch, sonst könnte das Ganze auch einfach mit einer verketteten Liste erreicht werden. bzw. was wenn ich in deinem Beispiel 3 Zeichen eingeb?! An mich gerichtet? Zitieren
TDM Geschrieben 12. Dezember 2008 Geschrieben 12. Dezember 2008 Structs auch, sonst könnte das Ganze auch einfach mit einer verketteten Liste erreicht werden. Liste = Array An mich gerichtet? Ja, weil: int length = 2; //... for(int i=length;i>=0;i--) { //... Da würde er ja immer nur 2 mal reingehen und 2 Zeichen des Strings ausgeben. Zitieren
Wodar Hospur Geschrieben 12. Dezember 2008 Geschrieben 12. Dezember 2008 (bearbeitet) Eine verkettete Liste ist prinz. != Array. int length = 2; //... for(int i=length;i>=0;i--) { //... Nein da eine Prüfung ja von i>=0 erfolgt, sprich: 2>=0 (right) 1>=0 (right) 0>=0 (right) -1>=0 (false, hier reichts) Bearbeitet 12. Dezember 2008 von Wodar Hospur Zitieren
TDM Geschrieben 12. Dezember 2008 Geschrieben 12. Dezember 2008 Eine verkettete Liste ist prinz. != Array. Natürlich. Array = Adresse von Wert 0 mit Verweißadresse auf Wert 1...n = verkette Liste Die Tatsache, dass du bei Arrays eine feste Größe angeben musst und eine verkette Liste sich dynamisch erweitert, ändert nichts an der Tatsache, dass Listen Arrays sind. Nein da eine Prüfung ja von i>=0 erfolgt, sprich: 2>=0 (right) 1>=0 (right) 0>=0 (right) -1>=0 (false, hier reichts) Angenommen ich geb "ab" (zwei zeichen) ein. 2 = '\0' 1 = 'b' 0 = 'a' Zitieren
Wodar Hospur Geschrieben 12. Dezember 2008 Geschrieben 12. Dezember 2008 (bearbeitet) int main(void) { char* input = "abc"; int length = sizeof(input) / sizeof(input[0]); printf("\n\n%s", input); printf("%i\n\n", length); printf("\n Output: "); for(int i=length;i>=0;i--) { printf("%c",*(input+(sizeof(char)*i))); } printf("\n"); return 0; } Erfolgt die Berechnung von length richtig, entsprechend wird auch die abschließende '\0' mit ausgegeben. Und ein Array zeigt sich dadurch aus das du KEINE verkettung der Elemente hast. Array= x*Feldgröße, navigieren erfolgt per x, sprich der Speicher muss auch direkt zusammenliegen.... Während Listen den Vorteil haben das durch Zeiger der Speicher liegen kann wo er mag. Beides sind Container, aber das war es auch schon mit der Gemeinsamkeit. Bearbeitet 12. Dezember 2008 von Wodar Hospur Zitieren
TDM Geschrieben 12. Dezember 2008 Geschrieben 12. Dezember 2008 int main(void) { char* input = "abc"; int length = sizeof(input) / sizeof(input[0]); printf("\n\n%s", input); printf("%i\n\n", length); printf("\n Output: "); for(int i=length;i>=0;i--) { printf("%c",*(input+(sizeof(char)*i))); } printf("\n"); return 0; } Erfolgt die Berechnung von length richtig, entsprechend wird auch die abschließende '\0' mit ausgegeben. Das mag ja schön und gut sein, aber sobald der User was eingeben will (was du hier nichtmal implementiert hast) und das ist länger als 3 Zeichen, hast du sogesehen ein Problem. Und ein Array zeigt sich dadurch aus das du KEINE verkettung der Elemente hast. Array= x*Feldgröße, navigieren erfolgt per x, sprich der Speicher muss auch direkt zusammenliegen.... Während Listen den Vorteil haben das durch Zeiger der Speicher liegen kann wo er mag. Wo die Positionen im Speicher für die einzelnen Elemente sind, ist irrelevant für die Definition eines Arrays. Zitieren
Bubble Geschrieben 12. Dezember 2008 Geschrieben 12. Dezember 2008 Die Tatsache, dass du bei Arrays eine feste Größe angeben musst und eine verkette Liste sich dynamisch erweitert, ändert nichts an der Tatsache, dass Listen Arrays sind. Verkettete Listen und Arrays sind unterschiedlich: Auf die Elemente eines Arrays kann in beliebiger Reihenfolge in O(1) zugegriffen werden. Zitieren
da-beauty Geschrieben 16. Dezember 2008 Autor Geschrieben 16. Dezember 2008 Ich habs am ende so gemacht:) char einlesen(char a) { if(ende == 0) { scanf("%c",&a); } if (a == '#') { ende = 1; } return a; } und diese dann 10 mal aufgerufen:) Der Benutzer muss halt am Ende mit einer # Bestätigen:) Zitieren
Guybrush Threepwood Geschrieben 17. Dezember 2008 Geschrieben 17. Dezember 2008 und wenn der Benutzer ein Wort mit 11 Buchstaben eingeben will? :eek Zitieren
Hexagon Geschrieben 17. Dezember 2008 Geschrieben 17. Dezember 2008 Ich wollte dazu auch schon was schreiben, habs mir dann aber verkniffen. Nun füge ich nur noch ein Zitat an: Genau diese Einstellung, gepaart mit Inkompetenz, sichert mir meinen Job. Weiter so Zitieren
da-beauty Geschrieben 18. Dezember 2008 Autor Geschrieben 18. Dezember 2008 ICh sag ja am anfang, dass er nur ein Wort mir Maximal 9 Buchstabe eingeben darf:P war ja nur ne Übung, um die Sache mal ohne Arrays zu machen:P:D Zitieren
Guybrush Threepwood Geschrieben 18. Dezember 2008 Geschrieben 18. Dezember 2008 und wieso nicht üben wie man es richtig macht? 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.