Taschenrechner Schleifenproblem?

Schnelle objektorientierte, kompilierende Programmiersprache.
dragonfloez
Beiträge: 92
Registriert: Fr Jan 22, 2010 1:49 pm

Taschenrechner Schleifenproblem?

Beitrag von dragonfloez » Di Jan 26, 2010 4:44 pm

Hallo Leute,

Versuche eine Schleife in mein Taschenrechner Programm einzubauen.

Code: Alles auswählen

#include <stdio.h>

#define mhw(a)((a*19)/100)

int main()
{
    int zahl1=0;
    float zahl2, zahl3;
    double zahl, zahl7, zahl8;

    printf ("Was möchten Sie tun\n");
    printf ("\n");
    printf ("1 Addieren");
    printf ("\n");
    printf ("2 Subtrahieren");
    printf ("\n");
    printf ("3 dividieren");
    printf ("\n");
    printf ("4 multiplitzieren");
    printf ("\n");
    printf ("5 Mehrwertsteuer berechnen");

    printf ("\n");





    printf ("Taetigen Sie bitte Ihre Eingabe: ");
    scanf ("%d", &zahl1);

printf ("\n");

    switch (zahl1)
    {
    case 1: printf ("Geben Sie die erste Zahl ein: ");
    scanf ("%f", &zahl2);
    printf ("Geben Sie die zweite Zahl ein: ");
    scanf ("%f", &zahl3);
    printf ("Das Ergebnis ist: %f\n", zahl2+zahl3);
    break;

    case 2:  printf ("Geben Sie die erste Zahl ein: ");
    scanf ("%f", &zahl2);
    printf ("Geben Sie die zweite Zahl ein: ");
    scanf ("%f", &zahl3);
    printf ("Das Ergebnis ist: %f\n", zahl2-zahl3);
    break;

    case 3:  printf ("Geben Sie die erste Zahl ein: ");
    scanf ("%lf", &zahl7);
    printf ("Geben Sie die zweite Zahl ein: ");
    scanf ("%lf", &zahl8);
    printf ("Das Ergebnis ist: %f\n", zahl7/zahl8);
    break;

    case 4: printf ("Geben Sie die erste Zahl ein: ");
    scanf ("%f", &zahl2);
    printf ("Geben Sie die zweite Zahl ein: ");
    scanf ("%f", &zahl3);
    printf ("Das Ergebnis ist: %f\n", zahl2*zahl3);
    break;

    case 5: printf ("Geben Sie den Betrag in Euro ein: ");
    scanf ("%lf", &zahl);
    printf ("Das Ergebnis ist: %lf\n", mhw(zahl));
    break;

    default:printf ("Wählen Sie zwischen 1,2,3,4,5");

    }





    return 0;

}

Ich brauche doch dazu eine WHILE Schleife oder nicht?, wie muß ich die einsetzten das ich immer wieder zur Auswal 1-5 (Eingabe) Gelange bis ich Z.B 0 eingebe???

Bitte um Hilfe!


Stimmt das so:

Code: Alles auswählen

#include <stdio.h>

#define mhw(a)((a*19)/100)

int main()
{
    int zahl1=0, zahl9=1;
    float zahl2, zahl3;
    double zahl, zahl7, zahl8;

    printf ("Was möchten Sie tun\n");
    printf ("\n");
    printf ("1 Addieren");
    printf ("\n");
    printf ("2 Subtrahieren");
    printf ("\n");
    printf ("3 dividieren");
    printf ("\n");
    printf ("4 multiplitzieren");
    printf ("\n");
    printf ("5 Mehrwertsteuer berechnen");

    printf ("\n");



 while (zahl9!= 0)
  {


    printf ("Taetigen Sie bitte Ihre Eingabe: ");
    scanf ("%d", &zahl1);




printf ("\n");

    switch (zahl1)
    {
    case 1: printf ("Geben Sie die erste Zahl ein: ");
    scanf ("%f", &zahl2);
    printf ("Geben Sie die zweite Zahl ein: ");
    scanf ("%f", &zahl3);
    printf ("Das Ergebnis ist: %f\n", zahl2+zahl3);
    break;

    case 2:  printf ("Geben Sie die erste Zahl ein: ");
    scanf ("%f", &zahl2);
    printf ("Geben Sie die zweite Zahl ein: ");
    scanf ("%f", &zahl3);
    printf ("Das Ergebnis ist: %f\n", zahl2-zahl3);
    break;

    case 3:  printf ("Geben Sie die erste Zahl ein: ");
    scanf ("%lf", &zahl7);
    printf ("Geben Sie die zweite Zahl ein: ");
    scanf ("%lf", &zahl8);
    printf ("Das Ergebnis ist: %f\n", zahl7/zahl8);
    break;

    case 4: printf ("Geben Sie die erste Zahl ein: ");
    scanf ("%f", &zahl2);
    printf ("Geben Sie die zweite Zahl ein: ");
    scanf ("%f", &zahl3);
    printf ("Das Ergebnis ist: %f\n", zahl2*zahl3);
    break;

    case 5: printf ("Geben Sie den Betrag in Euro ein: ");
    scanf ("%lf", &zahl);
    printf ("Das Ergebnis ist: %lf\n", mhw(zahl));
    break;

    default:printf ("Wählen Sie zwischen 1,2,3,4,5");

    }


  }


    return 0;

}

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Taschenrechner Schleifenproblem?

Beitrag von Kerli » Di Jan 26, 2010 5:00 pm

dragonfloez hat geschrieben:Ich brauche doch dazu eine WHILE Schleife oder nicht?, wie muß ich die einsetzten das ich immer wieder zur Auswal 1-5 (Eingabe) Gelange bis ich Z.B 0 eingebe???
Damit hast du doch schon quasi eine gedanklich fertige Schleife. Wo liegt denn jetzt das Problem? Kennst du die Syntax von Schleifen noch nicht? In unserem Wiki ist das beschrieben.

Hier das ganze in Pseudocode (der eigentlich eh schon fast wieder C ist :) ):

Code: Alles auswählen

int select = 0

do
  select = ask_user
  do_action(select)
while select != 0
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

dragonfloez
Beiträge: 92
Registriert: Fr Jan 22, 2010 1:49 pm

Re: Taschenrechner Schleifenproblem?

Beitrag von dragonfloez » Di Jan 26, 2010 5:19 pm

Hallo stimmt das soweit?

Code: Alles auswählen

#include <stdio.h>

#define mhw(a)((a*19)/100)

int main()
{
    int zahl1=0, zahl9=1;
    float zahl2, zahl3;
    double zahl, zahl7, zahl8;

    printf ("Was möchten Sie tun\n");
    printf ("\n");
    printf ("1 Addieren");
    printf ("\n");
    printf ("2 Subtrahieren");
    printf ("\n");
    printf ("3 dividieren");
    printf ("\n");
    printf ("4 multiplitzieren");
    printf ("\n");
    printf ("5 Mehrwertsteuer berechnen");
   printf ("\n");
   printf ("6 fuer Beenden");
    printf ("\n");



while (zahl9!= 1)
  {


    printf ("Taetigen Sie bitte Ihre Eingabe: ");
    scanf ("%d", &zahl1);

  }





printf ("\n");

    switch (zahl1)
    {
    case 1: printf ("Geben Sie die erste Zahl ein: ");
    scanf ("%f", &zahl2);
    printf ("Geben Sie die zweite Zahl ein: ");
    scanf ("%f", &zahl3);
    printf ("Das Ergebnis ist: %f\n", zahl2+zahl3);
    break;

    case 2:  printf ("Geben Sie die erste Zahl ein: ");
    scanf ("%f", &zahl2);
    printf ("Geben Sie die zweite Zahl ein: ");
    scanf ("%f", &zahl3);
    printf ("Das Ergebnis ist: %f\n", zahl2-zahl3);
    break;

    case 3:  printf ("Geben Sie die erste Zahl ein: ");
    scanf ("%lf", &zahl7);
    printf ("Geben Sie die zweite Zahl ein: ");
    scanf ("%lf", &zahl8);
    printf ("Das Ergebnis ist: %f\n", zahl7/zahl8);
    break;

    case 4: printf ("Geben Sie die erste Zahl ein: ");
    scanf ("%f", &zahl2);
    printf ("Geben Sie die zweite Zahl ein: ");
    scanf ("%f", &zahl3);
    printf ("Das Ergebnis ist: %f\n", zahl2*zahl3);
    break;

    case 5: printf ("Geben Sie den Betrag in Euro ein: ");
    scanf ("%lf", &zahl);
    printf ("Das Ergebnis ist: %lf\n", mhw(zahl));
    break;

    default:printf ("Wählen Sie zwischen 0,1,2,3,4,5");

    }










    return 0;

}

Benutzeravatar
stampuhh
Beiträge: 211
Registriert: Sa Nov 07, 2009 4:39 pm
Wohnort: Paderborn

Re: Taschenrechner Schleifenproblem?

Beitrag von stampuhh » Di Jan 26, 2010 7:01 pm

Jetzt werden bei dir immer nur diese beiden Zeilen wiederholt. Ich denke mal das ist nicht in deinem Interesse?

Code: Alles auswählen

    printf ("Taetigen Sie bitte Ihre Eingabe: ");
    scanf ("%d", &zahl1);
Du musst die while-Schleife um das machen, was du wiederholen möchtest.

Wenn ich mich jetzt nicht täusche meinst du eher so etwas? Code ungetestet!!

Code: Alles auswählen

#include <stdio.h>

#define mhw(a)((a*19)/100)

int main()
{
    int zahl1=0, zahl9=1;
    float zahl2, zahl3;
    double zahl, zahl7, zahl8;


while (zahl9== 1) //Ab hier wird alles wiederholt. Wenn zahl9 ungleich 1 ist wird die Schleife nicht mehr wiederholt!
  {

    printf ("Was möchten Sie tun\n");
    printf ("\n");
    printf ("1 Addieren");
    printf ("\n");
    printf ("2 Subtrahieren");
    printf ("\n");
    printf ("3 dividieren");
    printf ("\n");
    printf ("4 multiplitzieren");
    printf ("\n");
    printf ("5 Mehrwertsteuer berechnen");
   printf ("\n");
   printf ("6 fuer Beenden");
    printf ("\n");


    printf ("Taetigen Sie bitte Ihre Eingabe: ");
    scanf ("%d", &zahl1);

 

printf ("\n");

    switch (zahl1)
    {
    case 1: printf ("Geben Sie die erste Zahl ein: ");
    scanf ("%f", &zahl2);
    printf ("Geben Sie die zweite Zahl ein: ");
    scanf ("%f", &zahl3);
    printf ("Das Ergebnis ist: %f\n", zahl2+zahl3);
    break;

    case 2:  printf ("Geben Sie die erste Zahl ein: ");
    scanf ("%f", &zahl2);
    printf ("Geben Sie die zweite Zahl ein: ");
    scanf ("%f", &zahl3);
    printf ("Das Ergebnis ist: %f\n", zahl2-zahl3);
    break;

    case 3:  printf ("Geben Sie die erste Zahl ein: ");
    scanf ("%lf", &zahl7);
    printf ("Geben Sie die zweite Zahl ein: ");
    scanf ("%lf", &zahl8);
    printf ("Das Ergebnis ist: %f\n", zahl7/zahl8);
    break;

    case 4: printf ("Geben Sie die erste Zahl ein: ");
    scanf ("%f", &zahl2);
    printf ("Geben Sie die zweite Zahl ein: ");
    scanf ("%f", &zahl3);
    printf ("Das Ergebnis ist: %f\n", zahl2*zahl3);
    break;

    case 5: printf ("Geben Sie den Betrag in Euro ein: ");
    scanf ("%lf", &zahl);
    printf ("Das Ergebnis ist: %lf\n", mhw(zahl));
    break;

case 6 : printf("Beenden...\n"); //Hier wird dann die zahl9 verändert damit die Schleife verlassen wird!
zahl9 = 0;
break;

    default:printf ("Wählen Sie zwischen 0,1,2,3,4,5");

    }

}
    return 0;

}
NachDenkSeiten.de

dragonfloez
Beiträge: 92
Registriert: Fr Jan 22, 2010 1:49 pm

Re: Taschenrechner Schleifenproblem?

Beitrag von dragonfloez » Di Jan 26, 2010 8:10 pm

Hallo,
ja genau so was wollte ich. Habe ich auch als erstes probiert hat nur nicht funktioniert. Weil ich hinter break; eine } in der case 6 gemacht habe.


Wenn man also eine while Schleife hat und diese endet inmitten einem {Switch} dann kann man das (zahl9 = 0);
break; die { } weglassen? Ich dachte man muß das { } was man Schleifen will?

und unten im BUILD LOG:

steht:

Compiling: C:\Users\xy\Documents\Programme\44.c
Linking console executable: C:\Users\xy\Documents\Programme\44.exe
C:\Program Files\CodeBlocks\MinGW\bin\ld.exe: cannot open output file C:\Users\xy\Documents\Programme\44.exe: Permission denied
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
0 errors, 0 warnings

und das alles in Rot

Ist das normal???

Benutzeravatar
stampuhh
Beiträge: 211
Registriert: Sa Nov 07, 2009 4:39 pm
Wohnort: Paderborn

Re: Taschenrechner Schleifenproblem?

Beitrag von stampuhh » Di Jan 26, 2010 8:23 pm

Welches Betriebssystem hast du? Wenn du Vista oder Win7 hast musst du Code::Blocks vielleicht als Administrator starten...

Ansonsten weiß ich jetzt auch nicht was da das Problem sein könnte..außer den Sachen die auch schon im anderen Thread stehen.
Wenn man also eine while Schleife hat und diese endet inmitten einem {Switch} dann kann man das (zahl9 = 0);
break; die { } weglassen? Ich dachte man muß das { } was man Schleifen will?
Eine While Schleife kann nicht in einer Switch enden. Dann hast du irgendetwas falsch geklammert ;)
Das ganze ist so aufgebaut

Code: Alles auswählen

while()
{ //while Anfang

     //Abfrage von x
     switch(x)
     { //switch Anfang
      //case 1-6 und default
     } //switch Ende

} //while Ende
gruß stampuhh
NachDenkSeiten.de

dragonfloez
Beiträge: 92
Registriert: Fr Jan 22, 2010 1:49 pm

Re: Taschenrechner Schleifenproblem?

Beitrag von dragonfloez » Di Jan 26, 2010 8:29 pm

Hallo,
ok jetzt is es mir klar geworden. Man Klammert While ( (Switch) ). Ok und das Ende der Schleife liegt bei case 6 weil es mit dem Text : Wenn Sie beenden möchten drücken Sie... verknüpft ist und somit das ganze beendet.

Nur wiso steht da.

Code: Alles auswählen

case 6 : printf("Beenden...\n"); 
zahl9 = 0;
break;

    default:printf ("Wählen Sie zwischen 0,1,2,3,4,5");
ABER wiso schreibt man das break vor die dafault Anweisung? Ich dacht man muß hinter break auch die Klammer für das Wihle setzen um zu beenden setzten. Das ist mir noch nicht klar. Denn wenn man hinter break das } schreiben würde, tut man dann nicht das switsch aufbrechen?.

Benutzeravatar
stampuhh
Beiträge: 211
Registriert: Sa Nov 07, 2009 4:39 pm
Wohnort: Paderborn

Re: Taschenrechner Schleifenproblem?

Beitrag von stampuhh » Di Jan 26, 2010 8:39 pm

Nein ich glaube du hast da was falsch verstanden ;)

Das Programm läuft sozusagen den Code von oben bis unten ab.

Die switch Auswahl wird bis zum Ende durchlaufen. Wenn das break da nicht stehen würde, dann würde auch noch die Zeile "default" ausgeführt werden.

Der Ablauf wenn du 6 eingibst ist also, dass erst printf("Beenden") aufgerufen wird, dann zahl9 = 0 gesetzt wird und dann wird break aufgerufen. Break heißt in diesem Fall: beende die switch Abfrage und mache nach der } weiter. Nach der Klammer kommt dann die } der while-Schleife. Eine While-Schleife springt dann wieder zum Beginn, also in die Zeile wo while(zahl9 == 1) steht. Dann wird geguckt ob zahl9 immer noch 1 ist. Ist es aber in unserem Fall nicht mehr weil es auf 0 gesetzt wurde. Dann wird auch die while-Schleife abgebrochen und nach der } der while Schleife weiter gemacht. Da kommt dann nur noch das return 0 und das Programm ist am Ende.

Hoffe das war einigermaßen verständlich :D

gruß stampuhh
NachDenkSeiten.de

dragonfloez
Beiträge: 92
Registriert: Fr Jan 22, 2010 1:49 pm

Re: Taschenrechner Schleifenproblem?

Beitrag von dragonfloez » Di Jan 26, 2010 8:48 pm

Also wenn ich das richtig verstanden habe endet hinter break noch nicht das Switch oder das While. Sondern erst nach default endet das switch. Dann Endet das While.
Stimmt das so? Achso ich nutze Vista.

Benutzeravatar
stampuhh
Beiträge: 211
Registriert: Sa Nov 07, 2009 4:39 pm
Wohnort: Paderborn

Re: Taschenrechner Schleifenproblem?

Beitrag von stampuhh » Di Jan 26, 2010 9:06 pm

edit: Nein. Ein break beendet das switch schon ;)

Probier testweise einfach mal das hier aus:

Code: Alles auswählen

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

int main()
{
    int i = 1;

    printf("----------------------- 1. switch ----------------------\n\n");
    switch(i)
    {
        case 1 : printf("Das kommt bei 1\n");
        case 2: printf("Das kommt bei 2\n");
        default: printf("Das kommt bei default raus\n");
    }

    printf("\n----------------------- 2. switch ----------------------\n\n");
    switch(i)
    {
        case 1 : printf("Das kommt bei 1\n");
        break;
        case 2: printf("Das kommt bei 2\n");
        break;
        default: printf("Das kommt bei default raus\n");
    }
    return 0;
}
Wenn du das break weg lässt, dann endet die switch erst nach der }. Daher gehört da auch das break hin damit nicht noch das was bei default steht ausgeführt wird.
Nach der switch geht es dann "zurück" in die while-Schleife. Diese wird dann entweder noch einmal ausgeführt oder beendet.

gruß stampuhh
Zuletzt geändert von stampuhh am Di Jan 26, 2010 9:18 pm, insgesamt 1-mal geändert.
NachDenkSeiten.de

Antworten