Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi, also ich bin soweit, das ich im Grunde alles was ich an eine weitere Funktion an Vaiablen, Arrays usw. als Parameter übergeben kann, und zwar 'per referenz'. Das einzige wo ich noch ein Problem habe, ist folgendes:

ich habe dieses definiert:

FILE *fz;

Wie muss ich das einer weiteren Funktion Übergeben (wie deffinieren bzw. deklarieren, und wie aufrufen)?

Bine

Geschrieben

Moin,

ich denke mal wie jede Variable auch:

void dateiverarbeitung(FILE *);

dateiverarbeitung(fz); /*der Aufruf bei deinem Bsp*/

void dateiverarbeitung(FILE *datei)

{ /*source*/}

Ich hoffe mal das stimmt so...ich muß das auch jedesmal wieder neu ausprobieren (darfür geht es aber jedesmal schneller :) )

Greetz

Ketzer

Geschrieben

Hmm, klappt so nicht.

Also, bei mein char Array 'Datei' (zwei dimensional) mache ich das so:

Definition/Deklaration (je nachdem mit ';' oder ohne):

void Ueberpruefung(char Datei[][???])

Aufruf:

Ueberpruefung(Datei);

mein eindimesionales Array 'Eingabe' so:

Definition/Deklaration (je nachdem mit ';' oder ohne):

void Ueberpruefung(char *Eingabe)

Aufruf:

Ueberpruefung(Eingabe);

und meine normalen Varibalen so:

Definition/Deklaration (je nachdem mit ';' oder ohne):

void Ueberpruefung(char& Variablen)

Aufruf:

Uberpruefung(Variablen);

Aber mit dem FILE (ob jetzt *fz, *a *sonstwas) klappt es nicht.

Bine

Geschrieben

Klappt so nicht? Kann gar nicht sein ;)

Was klappt denn nicht? Bekommst du ne Fehlermeldung vom Compiler oder während der Laufzeit eine Protectionexeption?

Denn wenn ich mich nicht sehr irre wird ein FILE* genau wie z.B. ein long*, void* oder sonstwas* übergeben...

Sag mal was nicht klappt...

Greetz

Ketzer

Geschrieben

Bekomme vom Linker folgende Fehlermeldung:

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR> Test.obj : error LNK2001: unresolved external symbol "void __cdecl Ueberpruefung(int &,char *,char (* const)[150],int &,int &,int &,bool &,int &,int &,char (* const)[1000],char (* const)[101],struct _iobuf *,int &)" (?Ueberpruefung@@YAXAAHPADQAY0JG@

D000AA_N00QAY0DOI@DQAY0GF@DPAU_iobuf@@0@Z)

Geschrieben

:eek: Äääääääähhhhhhhhmmmmmmmmmmmmmm... :eek:

ohne dir nahe treten zu wollen - Wenn eine Funktion mehr als vier Parameter braucht, stelle ich mir immer die Frage, obs nicht auch irgendwie anders geht...

Wie schon die alten römer sagten: "Teile und herrsche".

Geschrieben

Ich weiß nicht, die Funktion um die es mir jetzt geht, also die ich jetzt erstellt habe, da habe ich die eigentlich Überprüfung reingepackt. Klar könnte ich die auch noch wieder aufteilen, aber nur dann, wenn die dann neuen Funktionen in der Funktion 'Ueberpruefung' aufrufe.

Meinst Du ich sollte bestimmte Variablen erst in der Funktion definieren?

Bine

Geschrieben

Also, habe jetzt alle Variablen die ich nur in der Funktion 'Ueberpruefung' brauche dort definiert. Habe jetzt noch fünf Parameter (ging leider nicht weniger, da ich die anderen Sachen auch noch verändert in 'main' brauche.

Aber die Fehlermeldung des Linkers kommt immer noch...

Bine

Geschrieben

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Woodstock:

<STRONG>Also, habe jetzt alle Variablen die ich nur in der Funktion 'Ueberpruefung' brauche dort definiert. Habe jetzt noch fünf Parameter (ging leider nicht weniger, da ich die anderen Sachen auch noch verändert in 'main' brauche.

</STRONG>

Geschrieben

Hast du mal probiert, ob das Prob auch isoliert auftritt, siehe Bsp. ?

<FONT COLOR="#a62a2a" SIZE="1">[ 18. Oktober 2001 15:54: Beitrag 1 mal editiert, zuletzt von captain haddock ]</font>

Geschrieben

Das ist ja sehr merkwürdig. Ich habe mal folgendes probiert:

// *** pfil.cpp ***

// wie ist das mit FILE* ?

#include <stdio.h> // hast du dieses include?

void func(FILE* fil)

{

int c = fgetc(fil);

putchar©;

}

void main(void)

{

FILE* f;

if( f = fopen("x.txt","r") ) // x.txt muß es natürlich geben ;)

{

func(f);

fclose(f);

}

}

Das kompiliert bei mir sowohl unter M$, gcc wie auch borland anstandslos !?! :)

<FONT COLOR="#a62a2a" SIZE="1">[ 19. Oktober 2001 08:53: Beitrag 1 mal editiert, zuletzt von captain haddock ]</font>

Geschrieben

Morgen *gähn*....

Also, ich weiß nicht wieso :confused: , aber ich habe es heute morgen einfach noch einmal geschrieben (also nur die Sache mit der Parameterübergabe natürlich), und jetzt klappt es :) ...

Thanks a lot...

Bine

Geschrieben

Kannst Du mir auch noch verraten wie ich das bei der Eingabe so regeln kann, das wenn ich als User keinen weiteren Suchbegriff mehr angeben will ich einfach nur <Enter> zu drücken brauche, ohne irgendwas anderes?!?

Bine

Geschrieben

Habe ich versucht, aber macht er so nicht, wie ich es versucht habe :confused: .

Wie also muß die Bedingung aussehen?

do

{

.

.

.

} while(strcmp (Eingegebenes, " ??? "));

Was muss ich anstelle der Fragezeichen setzen, oder muss ich es ganz verändern?

Bine

Geschrieben

Tja, ein trickiges Problem das damit zusammenhängt wie cin funktioniert. In der Form cin >> charbuf wird halt immer das nächste Stück zusammen hängender nicht-Leerzeiche eingelesen, kommt dieses nicht, bleibt in charbuf der alte Inhalt...

Eine Lösung wäre, die gesamte Zeile einzulesen mit istream::getline. Dann wird nämlich alles eingelesen, auch wenn nichts vor <enter> kommt wird dieses nichts eingelesen. Aus diesem string kann dann, wenn er nicht leer ist, mit einem strstream gelesen werden.

Oder du läßt dir die Suchbegriffe in einer Zeile geben. Probier mal dieses:

#include <iostream>

using namespace std;

void main(void)

{

char buffer[30][30];

int i = 0;

do

{

cin >> buffer[i++];

// Leerzeichen, die ggf. am Ende der Zeile stehen, entfernen, sonst evt. Problem...

while( (isspace(cin.peek())) && ( cin.peek() != '\n') )

cin.get();

}while( cin.peek() != '\n' );

// Nur um zu schauen, was in buffer so drin ist:

while(i)

cout << buffer[--i] << endl;

}

(Es gibt immer noch eine andere Lösung, als man denkt :) )

<FONT COLOR="#a62a2a" SIZE="1">[ 19. Oktober 2001 09:53: Beitrag 1 mal editiert, zuletzt von captain haddock ]</font>

Geschrieben

Hmm, danke für diese Idee, aber ich soll es so nicht machen (und dann kann ich nicht sagen, ich will es aber, weil es halt mein Chef ist, der Anweisungen gibt).

Kannst Du das über mehrere Zeilen (also jedes Suchwort in einer neuen Zeile) auch realisieren?

Ich habe es mit cin.getline probiert, aber das klappt so auch nicht, wie ich will (bekomme folgende Fehlermeldung: error C2661: 'getline' : no overloaded function takes 1 parameters ).

Wie machen?

Bine

PS: Ich wüßte wirklich nicht, was ich im Moment ohne Dich und die anderen hier tun würde... Danke

Geschrieben

Wenn ich mich erinnere, arbeitest du mit MSVC. Dann markier doch mal "getline" und drück F1. Wenn deine Firma eine anständige Installation hat, sollte die MSDN Library aufgehen, wo du dir anschauen kannst, wie z.B. getline deklariert ist (es braucht mindestens 2 Parameter :) ).

Das heißt nicht, daß ich es dir nicht auch verraten könnte, aber es geht oft schneller ;)

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>

istream& getline( char* pch, int nCount, char delim = '\n' );

pch : A pointer to a character array.

nCount : The maximum number of characters to store, including the terminating NULL.

delim : The delimiter character (defaults to newline).

Remarks

Extracts characters from the stream until either the delimiter delim is found, the limit nCount?1 is reached, or end of file is reached. The characters are stored in the specified array followed by a null terminator. If the delimiter is found, it is extracted but not stored.

Geschrieben

Ja, wir haben MSDN, das hätte ich Dir aber auch vorher sagen können, sorry. Arbeite auch damit, aber hat mir dabei nicht geholfen.

Ok, also getline ließt nur in Arrays, sehe ich das richtig? Weil der erste Parameter in der Klammer ein Zeiger auf eine char Array ist. Muss ich also aus meinem Buffer ein Array machen, ja?

Bine

Geschrieben

char a[5];

char* b;

char c[3][7];

Typ von a : char*

Typ von b : char*

Typ von c[x] : char*

 

#define BUFFLEN 128

#define ARR 17


char buff[BUFFLEN];

char arrbuff[ARR][BUFFLEN],


cin.getline(buff, BUFFLEN);


for( int i = 0; i < ARR, i++)

{

cin.getline(arrbuff[i], BUFFLEN);

}

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...