Zeigerproblem?
-
xcase schrieb:
einlesen.c:
[cpp]int einlesen (double speed[120], double steig[120])
{
int s**, i** ;...
return i;
} [/cpp]und in main.c
int main() { int i; ... i = einlesen (3.0, 5.0); //3.0 und 5.0 sind willkürlich gewählte Werte ... ... }
-
oneill5000 schrieb:
Dann übergibst du zum Beispiel eine Referenz auf i!
Aber nicht in C.
-
Dein i wird auf dem Stack im Gültigkeitsbereich der Funktion erzeugt, außerhalb gibt es kein i, die Zahl ist undefiniertes Verhalten.
Du musst entweder i zurückgeben (als Kopie einfach return i) oder du übergibst einen Zeiger auf i (int *iZeiger) in der Funktion. Oder du machst i global, darfst dann in der Funktion aber kein neues i deklarieren.
-
ja ich will halt nur das i wieder auf andere Funktionen übergeben....nicht das ich irgendwie die function aufrufen mus über einlesen (wert1, wert2) .
wenn ich das per zeiger mache....wie muss ich das dann realisieren?
Und wie geb ich das dann in der Hauptfunktion aus?
-
also ich hab jetzt i als globale variable deklariert in main.c . Einfach vor dem main() int i; eingegeben.
Jetzt hab ich in der funktion i=0 zu stehen und die 11 wird mir zwar wieder ausgegeben aber wenn ich das dann in der main.c versuche dann steht da jetzt immer 0. warummain.c
int i; int einlesen (double speed[120], double steig[120], int i) main() . . . einlesen (speed, steig, i); printf("%i", i); . .
da beim printf müsste jetzt 11 rauskommen, dem ist aber nicht so! Hier kommt 0 raus.
einlesen.c
[cpp]
int einlesen (double speed[120], double steig[120], int i)
{i=0;
.
.
.
printf("%i", i);return i;
}
Hier kommt aber 11 raus. warum
-
weil du i jetzt 2 mal deklariert hast. wenn du i global deklarierst darfst du i natürlich nicht nochmal im im funktionskopf erstellen.
alsoint i; int einlesen (double speed[120], double steig[120]) main() . . . einlesen (speed, steig); printf("%i", i); . .
und
void einlesen (double speed[120], double steig[120]) { //hier i einfach mit deinem code benutzen }
-
Du solltest das Ergebnis einfach via return zurückgeben. Globale Variablen sind hier mit Sicherheit der falsche Ansatz.
-
LordJaxom schrieb:
Du solltest das Ergebnis einfach via return zurückgeben. Globale Variablen sind hier mit Sicherheit der falsche Ansatz.
Jo, so wie ich es oben schon vorgemacht habe ...
-
jo danke super geklappt mit globalen variablen
Jetzt noch anderes. Wie kann ich am besten die do-while schleife ändern, sodass sie so lange durchlaufen wird, bis i<120 oder das ende der datei erreicht wurde. ICh weiss zwar das man das irgendwie mit EOF macht aber ich hab keine ahnung wie.
und am besten man macht daraus nur eine while schleife weil die ja ne eintrittsbedingung hat.Danke im vorraus!
-
Ich werfe mal ein feof(FILE*) in den Raum
Gut Schuß
VuuRWerK