Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

  • Antworten 72
  • Ansichten 11.8k
  • Erstellt
  • Letzte Antwort

Top-Poster in diesem Thema

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:

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 ;)

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;

}


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;


}

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.

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 von Wodar Hospur

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'


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 von Wodar Hospur


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.

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.

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:)

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 :D

:P 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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.