Zum neuen Informatik-Forum >>
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Parameterübergabe bei C-Funktionen

 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> C/C++
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
oppi25



Anmeldungsdatum: 06.06.2006
Beiträge: 4

BeitragVerfasst am: 08. Jul 2006 18:46    Titel: Parameterübergabe bei C-Funktionen Antworten mit Zitat

Also ich möchte gerne das ich eine Funktion habe, welche einen Wert besitz und diesen dann ins main schmeißt und damit rechnet. Ich kriegs einfach nicht hin.
Hier der Code.

#include <stdio.h>
#include <math.h>
#include <iostream.h>

void main(void)
void zahl(void)

int main()
{
int b,c;
zahl();
printf("Bitte eine Zahl eingeben:",&b);
scanf("%i",&c);
c=a+b;
printf("%i\n",&c);
}

void zahl()
{
int a;
a=3;
}

Gruß Oppi

// edit dachdecker2: ich hab mir mal erlaubt, den Titel etwas zu verbessern, original: "Funktionen"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Crotaphytus



Anmeldungsdatum: 08.05.2005
Beiträge: 213

BeitragVerfasst am: 08. Jul 2006 20:46    Titel: Antworten mit Zitat

Variable sind nur in ihrer jeweiligen Umgebung definiert. Das heißt, nachdem zahl() abgearbeitet worden ist, weiß main() nicht, was a für eine Variable ist geschweige denn welchen Wert sie hat.
_________________
Genie oder Wahnsinn? Wer kann es wissen...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Paul_H



Anmeldungsdatum: 01.02.2006
Beiträge: 52
Wohnort: Bonn

BeitragVerfasst am: 08. Jul 2006 22:05    Titel: Antworten mit Zitat

es gibt hier zwei Möglichkeiten.

1. Du definierst a außerhalb aller Funktionen.
Die Funktion "Zahl" implementiert dann die Variable a (legt diese fest), und main
weiss, was a ist. Da du a dann aber genausogut auch außerhalb aller Funktionen
gleich mit implementieren kannst, ist diese Möglichkeit nicht sehr sinnvoll.


2. Deine Funktion Zahl definierst du nicht als void-Methode, sondern eher so:

int Zahl()
{
int a = 3;
return a;
}

allerdings muss dann in deiner main dass a einfach durch Zahl(); ersetzt werden, du behandelst also quasi deine Funktion wie eine Variable.





Mich würde aber mal abgesehen davon unglaublich interessieren, was du eigentlich berechnen willst.

Ich denke, du willst a festlegen, b über die Tastatur eingeben und c= a + b
über die Konsole ausgeben.

Wenn das stimmt, gibt es ein paar wichtige Korrekturen durchzuführen.

1. printf("Bitte eine Zahl eingeben:", &b); -> das &b ist hier überflüssig.
2. scanf("%i",&c); Um eine int-Zahl einzugeben, muss hier statt "%i" ein "%d"
stehen, d für decimal. Außerdem soll die eingegebene Zahl ja an Adresse b
gespeichert werden, also hier &b statt &c.
3. printf("%i\n",&c); siehe oben. -> "%i" -> "%d".
Außerdem kommt hier bei der Ausgabe NUR das c hin, also &c -> c, da du mit &
die Adresse der Speicherstelle von c ausgibst, und nicht den Wert, der bei c
gespeichert ist.

Wenn du schon länger C/C++ programmierst, weisst du das natürlich, und ich hoffe, du fühlst dich jetzt nicht beleidigt, weil ich dir solche Fehler zutraue Augenzwinkern , denn wenn du noch nicht lange damit programmierst, sind das beliebte Anfängerfehler.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dachdecker2
Moderator


Anmeldungsdatum: 11.06.2005
Beiträge: 106
Wohnort: Maintal / Hessen

BeitragVerfasst am: 08. Jul 2006 23:54    Titel: Antworten mit Zitat

Wenn du willst, dass das a von main() aus und auch von zahl() aus die gleiche Bedeutung hat, musst du a global definieren, das sieht dass so aus:

Code:
#include <stdio.h>
#include <math.h>
#include <iostream.h>

int main(void); // das ; ist wichtig, aber die Deklaration von main() kannst du auch weglassen,
                // vor allem sollten aber die Funktionsprototüpen mit den Funktionen übereinstimmen,
                // was die Parameter angeht
void zahl(void); // das ; nicht vergessen

int a;  // globale Deklaration von a, dieses a ist überall zu sehen,
        // wo es kein lokales a gibt

int main()
{
// int a;  //<-- wenn a weder global noch hier lokal deklariert ist,
           // kriegst du eine Fehlermeldung, wenn du auf a zugreifen willst
int b,c;
zahl();
printf("Bitte eine Zahl eingeben:",&b); // das b wird ignoriert, printf weiß nicht, was damit zu tun ist
scanf("%i",&c);
c=a+b;
printf("%i\n", c);
}

void zahl()
{
int a;
a=3;
}


Versuche aber lieber, dass du entweder deine Rechenergebnisse mit Return an den Aufrufer zurückgibst oder im falle von mehreren Ergebnissen kannst du der Rechenfunktion statt des Wertes der Variablen einen Zeiger darauf geben, so hat sie die möglichkeit die Variablen der Aufruferfunktion direkt zu verändern. Globale Variablen machen den Code undurchschaubar - je größer das Programm, desto mehr erschweren globale Variablen spätere Änderungen im Programm.

Beispiel für eine Funtktion, die 2 Werte zurückgibt:
Code:
#include <stdio.h>
#include <iostream.h>

// diese Funktion erwartet zwei Zeiger auf int-Variablen
void gib2Zahlenzurueck(int *a, int *b);

int main()
{
   int x,y;
   gib2Zahlenzurueck(&x,&y); // & ist der Adressoperator,
                            // er gibt die Adresse der Variablen zurück
   printf("x ist %d und y ist %d", x, y);
}

void gib2Zahlenzurueck(int *a, int *b)
{
   *a = 3;
   *b = 4;
}


// edit: sorry, ich glaub ich hab mir nicht alles aufmerksam durchgelesen, das steht ja fast alles schon in Paul_H's Post. Aber: %i = %d
und ich hab zwei Sternchen vergessen

_________________
In a world without walls and fences, who needs windows and gates? [Internet]

Gruß, dachdecker2
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden MSN Messenger
oppi25



Anmeldungsdatum: 06.06.2006
Beiträge: 4

BeitragVerfasst am: 09. Jul 2006 16:01    Titel: Antworten mit Zitat

Gerafft. Danke schön.
_________________
Das Leben ist kein Ponyhof.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Informatikerboard.de Foren-Übersicht -> C/C++ Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen