mikrocontroller.net

Forum: PC-Programmierung Benötige euere Hilfe bei meinem C Programm (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 Christoph (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich lernen gerade C und hänge seit Tagen an einer Aufgabe fest.
Es geht hauptsächlich um Funktionen.
Leider werden die Funktionen nicht ausgeführt, ich habe schon alles 
mögliche ausprobiert, komme mit meinem Anfängerwissen aber leider nciht 
weiter.
Ich freue mich sehr über eure Hilfe!

Die Aufgabe ist im Anhang und hier ist mein Code :
#include <stdio.h>

int counter;
    int selection;
  int quantity;
    double money;
  double total_cost=0;
  double price;
  double sum;
  double change;

    int menu();
  int FoodSelected (int selection);
  double ItemCost(int selection);
  double totalprice(double price, int quantity);
    double EnteredMoney(double money, double sum);

int main()
{
  int counter;
    int selection;
  int quantity;
    double money;
  double total_cost=0;
  double price;
  double sum;
  double change;

    // write the code to print the first 4 lines of the output image in the output file //
  FILE *fp;
    fp  = fopen ("invoice.txt", "w");
    fprintf(fp, "The bill info of the selected item is:\n");
    fprintf(fp, "--------------------------------------------------------------------------------:\n");
    fprintf(fp, "The bill info of the selected item is:\n");
    fprintf(fp, "Item \t Price \t Quantity \t Total \t Paid Money \t Remaining Money\n");
    fprintf(fp, "--------------------------------------------------------------------------------:\n");


  for (counter=1, counter > 0, ++counter)
  {

    int menu ();

    if (selecion != 5)
    {
      int FoodSelected (int selection);
      double ItemCost(int selection);
      double totalprice(double price,int quantity);
      if (selection ==1)
      {
        fprintf(fp, "Apple\t  %f \t %d  \t %f \n", &price, &quantity, &total_cost);
      }
      else if (selection ==2)
      {
        fprintf(fp, "Banana\t  %f \t %d  \t %f \n", &price, &quantity, &total_cost);
      }
      else if (selection ==3)
      {
        fprintf(fp, "Orange\t  %f \t %d  \t %f \n", &price, &quantity, &total_cost);
      }
      else (selection ==4)
      {
        fprintf(fp, "Salad\t  %f \t %d  \t %f \n", &price, &quantity, &total_cost);
      }
      sum = sum + total_cost;
      printf("------------------------------------------");
    }

    else (selecion == 5)
    {
      printf("Please enter the Money");
      printf("\n");
        scanf("%f",&money);
      printf("\n");

      double EnteredMoney(double money, double sum);
      fprintf(fp, "--------------------------------------------------------------------------------:\n");
      fprintf(fp, "\t\t\t\t %d $\t %f $ \n", &money, &change);
      break;
    }

  }

  printf("Thank you for your payment, please check the reset file which has your payment details\n");
  fclose (fp);

  return 0;


  menu();
  int FoodSelected(int selection);
  int ItemCost(int selection);
  double totalprice(double price, int quantity);
    double EnteredMoney(double money, double sum);

  return 0;
}

/* Menu Function */

int menu ()
  {
    /*List the menu on the screen*/
    printf("MENU: ");
    printf("\n");
    printf("1. Apple                   $1.00\n");
    printf("2. Banana                  $1.50\n");
    printf("3. Orange                  $2.00\n");
    printf("4. Salad                   $3.00\n");
    printf("5. Quit");
    printf("\n\n");

    /* Ask the user to choose an option from the menu*/
    printf("Please enter your selection: ");
    scanf("%d",&selection);
    printf("\n");

    return selection;
  }

/* Food Selection Function */

/* This function displays the selected item by the user and ask him how many of that item he needs*/
int FoodSelected (int selection)
  {
  if (selection==1)
    {
      printf("You have selected Apple.                   $1.00 ");
      printf("\n");
      printf("How many of the item you need\n");
        scanf("%d",&quantity);
    }
  else if (selection==2)
    {
      printf("You have selected Banana.                   $1.50 ");
      printf("\n");
      printf("How many of the item you need\n");
        scanf("%d",&quantity);
    }
  else if (selection==3)
    {
      printf("You have selected Orange.                   $2.00 ");
      printf("\n");
      printf("How many of the item you need\n");
        scanf("%d",&quantity);
    }
  else if (selection==4)
    {
      printf("You have selected Salad.                   $3.00 ");
      printf("\n");
      printf("How many of the item you need\n");
        scanf("%d",&quantity);
    }

  else                                  /* If the user enter a value that is not between 1-5*/
    {
      printf("Invalid selection! Please try again.");
      scanf("%d",&selection);
      printf("\n");
      int FoodSelected (int selection);
    }

  return quantity;
  }


/* Selected Item Cost Function */

/* This funtion defines the value of the item selected by the user*/

double ItemCost(int selection)
  {
  if (selection==1)
    {
      price = 1.00;
    }
  else if (selection==2)
    {
      price = 1.50;
    }
  else if (selection==3)
    {
      price = 2.00;
    }
  else if (selection==4)
    {
      price = 3.00;
    }
  return price;
  }




/* Total Item Cost Function */

/* This finction calculates the total cost of the item. It is the price multiplies by the quantity*/
double totalprice(double price,int quantity)
  {
    total_cost = price*quantity;
    return total_cost;
  }



/* Entered Money and return change Functions */

/* This function calculates the change and checks if the money value is valid*/

double EnteredMoney(double money, double sum)
    {
            double change;
      if (money >= sum)
      {
        change = money - sum;
      }
      else
      {
      printf("Error! Please enter the money again!!\n");
      scanf("%f",&money);
      printf("\n");
      double EnteredMoney(double money, double sum);
      }

      return change;
    }


/* Main Function */

: Bearbeitet durch Moderator
von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht lesenswert
Code besser als Anhang, dann lässt sich das einfacher lesen.

Zum Problem:
return 0;

macht immer genau das, was du erwartest.

Oliver

von Fabian (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Was soll dieser Bereich deiner Meinung nach machen?
for (counter=1, counter > 0, ++counter)
  {

    int menu ();

von BobbyX (Gast)


Bewertung
0 lesenswert
nicht lesenswert
for (counter=1, counter > 0, ++counter)

Das ist bestimmt nicht im Sinne des Erfinders. Hier sollten zu 
mindestens Semikolone und nicht Kommas eingesetzt werden. Auch wird die 
counter Variable nicht initialisert. Ergo: Der Code in der for Schleife 
wird nie ausgeführt...

von Christoph (Gast)


Bewertung
0 lesenswert
nicht lesenswert
BobbyX schrieb:
> Der Code in der for Schleife
> wird nie ausgeführt...

Oh dank, das habe ich auch eben erst bemerkt und behoben.

von Christoph (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Fabian schrieb:
> Was soll dieser Bereich deiner Meinung nach machen?
> for (counter=1, counter > 0, ++counter)
>   {
>
>     int menu ();

Dieser Code soll die Eingaben zählen welche eingelesen werden,
da mehrere Dinge über das Menu ausgewählt werden können

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe mal die Code-Tags
[c]
...
[/c]

eingefügt, so dass auch die zu Fehlern führenden Zeilenumbrüche
verschwinden. Syntaktisch korrekt ist der Code damit aber noch lange
nicht. Es scheinen auch noch einige Tippfehler darin zu sein.

von Wilhelm M. (wimalopaan)


Bewertung
0 lesenswert
nicht lesenswert
Christoph schrieb:
> Dieser Code soll die Eingaben zählen welche eingelesen werden,
> da mehrere Dinge über das Menu ausgewählt werden können

Leider ist das kein Funktionsaufruf, so wie es da steht.

von Wilhelm M. (wimalopaan)


Bewertung
2 lesenswert
nicht lesenswert
Ich kann mir kaum vorstellen, dass Dein Tutor Euch mit dieser Aufgabe 
überfallen hat. Da gab es sicher Übungen davor zum Thema Funktionen. 
Diese solltest Du erstmal wiederholen.

von Yalu X. (yalu) (Moderator)


Bewertung
1 lesenswert
nicht lesenswert
Wenn du alle Syntaxfehler beseitigt hast, solltest im Compileraufruf die
Warnungen aktivieren. Dann werden dir mehrere Variablen, die nirgends
initialisiert werden, und jede Menge Typfehler in fprintf- und
scanf-Aufrufen angezeigt.

von Dirk B. (dirkb2)


Bewertung
0 lesenswert
nicht lesenswert
int FoodSelected (int selection); 
 ist kein Funktionsaufruf, sondern eine Funktionsdeklaration.

fopen ist eine Funktion (mit Rückgabewert). Schau mal, wie du die 
aufrufst.

Du benutzt sehr viele globale Variablen.
Das ist eher blöd. Zudem definierst du innerhalb von main (das ist auch 
eine Funktion) lokale Variablen mit denselben Namen. Diese überdecken 
dann die globalen Variablen.

Das heißt, dass die globale Variable quantity aus der Funktion 
FoodSelected  eine andere Variable ist, als quantity in main

von Dave4 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Und wenn das ganze läuft, kannst du dir nochmal "case" als Alternative 
zu den "if" anschauen

Außerdem kannst du die Mengenabfrage noch in eine weitere Funktion 
auslagern damit sich der Code nicht so oft wiederholt.

von ichversuchsmal (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Schaue in deinen Unterlagen nochmal nach den Themen Gültigkeitsbereich 
von Variablen, den Unterschieden zwischen Deklaration und Aufruf von 
Funktionen, dem Unterschied zwischen dem Erzeugen einer Variable und 
einer Wertzuweisung an eine Variable, nach Parameterübergabe an und dem 
Rückgabewert von Funktionen.

Das setzt du dann mit einer Funktion um. Baue dir an Stellen in deinem 
Code "printfs" ein und lasse die Werte, die du erwartest auf der Konsole 
ausgeben.

Du wirst überrascht sein.

Versuche nicht dein ganzes Programm auf einmal zum Laufen zu bringen.

Nur Mut. Generationen vor dir haben es auch nur so gelernt.

von Christoph (Gast)


Bewertung
0 lesenswert
nicht lesenswert
ichversuchsmal schrieb:
> Versuche nicht dein ganzes Programm auf einmal zum Laufen zu bringen.
>
> Nur Mut. Generationen vor dir haben es auch nur so gelernt.

Vielen Dank für diesen Beitrag, das ist sehr motivierend!

Vielen Dank auch an alle anderen!
Ich habe mich mitlerweile mit ein paar Freunden zusammengesetzt und die 
Aufgabe gleich hoffentlich gelöst.

Vielen Dank!

von Wilhelm M. (wimalopaan)


Bewertung
0 lesenswert
nicht lesenswert
Christoph schrieb:
> Ich habe mich mitlerweile mit ein paar Freunden zusammengesetzt und die
> Aufgabe gleich hoffentlich gelöst.

Sehr gut. Face2face ist immer noch am besten.

von Dirk B. (dirkb2)


Bewertung
0 lesenswert
nicht lesenswert
Christoph schrieb:
> Ich habe mich mitlerweile mit ein paar Freunden zusammengesetzt und die
> Aufgabe gleich hoffentlich gelöst.

Du kannst gerne den Code nochmal hier einstellen.
Dann schauen wir nochmal drüber.

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.

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