Forum: PC-Programmierung C Programmierung Funktionen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Detlef H. (electroniknoob)


Bewertung
0 lesenswert
nicht lesenswert
Hi.

Ich versuche ein Programm zu schreiben, welches 4 simple Berechnung 
macht. Danei wollte ich alles über Funktionen realisieren.

Ich habe Funktionen für Menüausgabe, Auswahle, Eingabe. Jetzt Wollte ich 
noch eine Funtion für die Berechnung machen, kriege es aber nicht hin 
die Auswahl des Menüpunktes und die eingegebenen Werte zu übernehmen.

Hier ist der code:

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

void Ausgabe(void);
double lese_f( void );
void Abfrage(void);
void Eingabe(void);
int Berechnung(int auswahl);



int main()
{
  Ausgabe();
  Abfrage();
  Eingabe();


  return 0;
}

double lese_f( void )
{
    double zahl;
    char zeile[80];

    fgets( zeile, 79, stdin );
    sscanf( zeile, "%lf", & zahl );
    return zahl;
}

void Ausgabe(void)
{
  printf("\tMenuegesteuerte Berechnung");
  printf("\n\t==========================");
  printf("\n 1. Addition        2. Subtraktion");
  printf("\n 3. Multiplikation      4. Division");
  printf("\n 5. Beenden");
}

void Abfrage(void)
{
  int auswahl;

  printf("\n\n\nBitte geben Sie einen Menuepunkt ein: ");
  auswahl=lese_f();
  printf("\n\n");
}

void Eingabe(void)
{
  int zahl1, zahl2;

  printf("Erster Operand:\t\t");
  zahl1 = lese_f();
  printf("\n");
  printf("Zweiter Operand:\t");
  zahl2 = lese_f();
  printf("\n");
}

int Berechnung(int auswahl)
{
  int ergebnis;
  if(auswahl == 1)
  return ergebnis = zahl1 + zahl2;
}




Kann mir jemand helfen? Wie bringe ich die Funktion dazu die Auswahl und 
die beiden werte zu übernehmen?

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Deine Funktion "Abfrage" behält die Auswahl für sich.

Damit aber nach dem Ausführen von "Abfrage" auf die Auswahl reagiert 
werden kann, sollte die Auswahl dem Aufrufer (Deine Funktion main) 
bekanntgegeben werden.

Dann nämlich kann beim Aufruf von "Berechnung" die Auswahl dieser 
Funktion übergeben werden.

Das gleiche Problem hast Du auch bei "Eingabe", auch diese Funktion 
behält die eingegebenen Werte für sich.

von Detlef H. (electroniknoob)


Bewertung
0 lesenswert
nicht lesenswert
Ich weiß nicht wie

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Bewertung
1 lesenswert
nicht lesenswert
Detlef H. schrieb:
> Ich weiß nicht wie

In welchem Buch über C, das Du intensiv durchgearbeitet hast, werden 
denn diese elementaren Grundlagen nicht ausführlich behandelt? Das würde 
mich schon sehr interessieren.

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
Detlef H. schrieb:
> Ich weiß nicht wie

Wie bist du denn ohne das Wissen so weit gekommen? Du benutzt die 
nötigen Mechanismen doch schon an anderer Stelle.

von Wurzelzieher (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Andreas S. schrieb:
> In welchem Buch über C, das Du intensiv durchgearbeitet hast, werden
> denn diese elementaren Grundlagen nicht ausführlich behandelt? Das würde
> mich schon sehr interessieren.

Ja, das ist sicher von allgemeinem Interesse. Es würde dem Leser den 
Kauf eines recht wenig nützlichen Buches ersparen. Zumal diese Schwarten 
ja recht teuer sind und der Eine vom Anderen (inclusive Fehlern) 
abschreibt.

von Detlef H. (electroniknoob)


Bewertung
-2 lesenswert
nicht lesenswert
Ernsthaft, egal in welchem deutschen Forum man postet. Meist trifft man 
auf der art dumme Antwortet von aroganten Leutenm. nice help!!

von Rolf M. (rmagnus)


Bewertung
2 lesenswert
nicht lesenswert
Detlef H. schrieb:
> Ernsthaft, egal in welchem deutschen Forum man postet. Meist trifft man
> auf der art dumme Antwortet von aroganten Leutenm.

"Ein Geiterfahrer? Hunderte!"
Hast du schon mal darüber nachgedacht, dass es an dir liegen könnte?

> nice help!!

Sorry, aber was du hier fragst, sind absolute Grundlagen, die in jedem 
annähernd brauchbaren Buch stehen. Es ist wenig sinnvoll, die in einem 
Forum immer und immer wieder, wenn jemand danach fragt, nochmal neu zu 
erklären.

Übrigens: Meine Frage, wie du es geschafft hast, an einer Stelle die 
nötige Funktionalität von C schon genutzt zu haben, an einer anderen 
aber keine Idee zu haben, wie das geht, war ernst gemeint.
Kann es sein, dass du das als Hausaufgabe bekommen hast und nur zu faul 
bist, es selbst zu lösen?

: Bearbeitet durch User
von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
1 lesenswert
nicht lesenswert
Detlef H. schrieb:
> Ich weiß nicht wie

Ach.

Das ist unglaubwürdig, denn Dein Code enthält eine Funktion, die sich 
anders verhält als die Funktionen, die ihre "inneren Werte" für sich 
behalten.

Und Du verwendest diese Funktion in Deinem Code sogar auf die richtige 
Art und Weise.

Wie kann es dann sein, daß das, was Du an der einen Stelle völlig 
richtig hinbekommst, Du urplötzlich an anderer Stelle nicht mehr 
schaffst?


Irgendwie zweifle ich daran, daß Du diesen Code da oben tatsächlich 
komplett selbst geschrieben hast.

von doedel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
was unterscheidet:

double lese_f( void )

von

void Ausgabe(void)

??? Wenn Du den Unterschied erkennst, weißt Du auch, wie Du das Problem 
lösen kannst.

von Korobirne (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Eine alternative wäre noch die Verwendung von globalen Variablen.
Damit kannst du das Problem von den Return Werten umgehen.

von Carl D. (jcw2)


Bewertung
0 lesenswert
nicht lesenswert
Detlef H. schrieb:
> Ernsthaft, egal in welchem deutschen Forum man postet. Meist trifft man
> auf der art dumme Antwortet von aroganten Leutenm. nice help!!

Hier gibt es doch einige, die dich mit provokanten Aussagen in die 
Richtige Richtung schubsen wollte, damit du das selber lernst.

Auf stackoverflow.com, das ich selber gern konsultiere, geht es aber 
eher darum schnell und viel beantwortet zu haben. Wie gesagt, für ein 
Problem mit Zeitnot ist das OK, lernen tut man wenig, wenn man nur 
Antworten kopiert.

Wenn es aber nur darum geht, die nächste Hausarbeit abzuliefern, dann 
hast du das Forum richtig verstanden!

von Andreas R. (daybyter)


Bewertung
0 lesenswert
nicht lesenswert
Ein Rückgabewert ist kein Problem?

Globale Variablen werden oft zum Problem, wenn man den Überblick 
verliert, an welchen Stellen sie überall geändert werden.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.