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.

Übergabe von arrays an Funktionen

Empfohlene Antworten

Veröffentlicht

Hallo,

ich möchte gerne in einer Unterfunktion eine Text-Datei auslesen und die Werte aus dieser Textdatei in ein Array schreiben.

In der Text-Datei sind Bestückungsreihenfolgen für 3 verschiedene Ventilblöcke hinterlegt, die Text-Datei sieht so aus:

Typ 1: gruen rot blau pink pink - - - - rot rot rot pink gruen rot gruen

Typ 2: rot rot rot rot rot - - - - rot rot rot pink gruen rot pink

Typ 3: pink pink - - - - - - - rot rot rot pink gruen rot rot

Das Array, in welches der ganze Spaß geschrieben werden soll, ist 3-dimensional, ich habe so so definiert:

char bestueckung[3][16][10];

-> d.h. 3 verschiedene Ventilblöcke, 16 Positionen pro Ventilblock, 10 "Buchstaben" pro Position.

Das auslesen an sich funktioniert, ich weiß nur nicht so ganz, wie ich die Übergabe realisieren soll.

Das Array "bestueckung" habe ich in meinem Hauptprogramm definiert.

Aufgerufen wird die Auslese-Funktion wie folgt:

ausles(bestueckung);

Die Funktion ausles habe ich wie folgt definiert:

void ausles(char* datei_best)

{

char dat_best[80];

char dummy[80];

FILE *eingabe;

sprintf(dat_best,"bestueckung.txt");

eingabe = fopen(dat_best, "r");

if(eingabe == NULL)

{

printf("\n");

printf("\nDatei konnte zum Lesen nicht geoeffnet werden!");

exit(1);

}

fscanf(eingabe, "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s", &dummy, &dummy, &datei_best[0][0], &datei_best[0][1],

&datei_best[0][2],&datei_best[0][3],&datei_best[0][4],&datei_best[0][5],&datei_best[0][6],&datei_best[0][7],&datei_best[0][8],

&datei_best[0][9],&datei_best[0][10],&datei_best[0][11],&datei_best[0][12],&datei_best[0][13],&datei_best[0][14],&datei_best[0][15]);

fscanf(eingabe, "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s", &dummy, &dummy, &datei_best[1][0], &datei_best[1][1],

&datei_best[1][2],&datei_best[1][3],&datei_best[1][4],&datei_best[1][5],&datei_best[1][6],&datei_best[1][7],&datei_best[1][8],

&datei_best[1][9],&datei_best[1][10],&datei_best[1][11],&datei_best[1][12],&datei_best[1][13],&datei_best[1][14],&datei_best[1][15]);

fscanf(eingabe, "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s", &dummy, &dummy, &datei_best[2][0], &datei_best[2][1],

&datei_best[2][2],&datei_best[2][3],&datei_best[2][4],&datei_best[2][5],&datei_best[2][6],&datei_best[2][7],&datei_best[2][8],

&datei_best[2][9],&datei_best[2][10],&datei_best[2][11],&datei_best[2][12],&datei_best[2][13],&datei_best[2][14],&datei_best[2][15]);

fclose(eingabe);

Wo liegt mein Denkfehler? Habe ich vielleicht die Pointer falsch definiert?

Über Hilfe wäre ich dankbar,

Grüße

Chris

Du hast völlig recht, das Problem liegt bei der Deklaration der Funktion.

In C werden Arrayas immer als Referenzen, also als Pointer übergeben.

//Edit: du hast die Sprache nicht erwähnt, aber ich vermute in C++ stimmt meine Aussage auch

Mit

void ausles(char* datei_best)
erwartet deine Prozedur ein Array mit Pointern und kein Pointer auf ein Array. Richtig müsste es so heißen:
void ausles(char datei_best[3][16][10])

Hallo,

danke für das Feedback.

Ist nicht c++, soll in C programmiert werden.

Wenn ich die Funktion aufrufe, so wie du es gepostet hast, kriege ich beim Compilieren einen Error, bezogen jeden Aufruf von

&datei_best[][] (z.B. &datei_best[0][13])

Fehlermeldung: Type error - pointer expected.

Grüße,

Chris

Wenn ich die Funktion aufrufe, so wie du es gepostet hast, kriege ich beim Compilieren einen Error, bezogen jeden Aufruf von

&datei_best[][] (z.B. &datei_best[0][13])

Fehlermeldung: Type error - pointer expected.

Wie du sie aufrufen sollst, hat Zakum gar nicht geschrieben.

Aufrufen kannst du die Funktion - wenn sie richtig deklariert ist - einfach so:

ausles( datei_best );

Eckige Klammern oder Adressoperatoren haben da nichts zu suchen.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

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.