Seite 1 von 3

#define funktioniert nicht, warum?? tut.at

Verfasst: So Jan 24, 2010 4:30 pm
von dragonfloez
Hallo Leute,
in meinem Programm funktionert die # define Anweisung nicht. Kann mir jemand sagen warum?, was habe ich falsch gemacht?

Code: Alles auswählen

#include <stdio.h>

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

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


printf ("Taschenrechner fuer den Universellen Einsatz");
printf ("\n");

printf ("Geben Sie fuer ja 1 und fuer nein 0 ein.");

printf ("\n");

printf(" Wollen Sie addieren:");
scanf ("%d", &zahl3);

if (zahl3==1)
{
    printf ("Geben Sie die erste Zahl ein: ");
scanf ("%d", &zahl1);

printf ("Geben Sie die zu addierende Zahl ein: ");
scanf ("%d", &zahl2);

printf ("Das Ergenis ist %d\n", zahl1+zahl2);
}

printf("Wollen Sie subtrahieren:");
scanf ("%d", &zahl4);

if (zahl4==1)
{
    printf ("Geben Sie die erste Zahl ein: ");
scanf ("%d", &zahl1);

printf ("Geben Sie die zu subtrahierende Zahl ein: ");
scanf ("%d", &zahl2);

printf ("Das Ergenis ist %d\n", zahl1-zahl2);
}


printf("Wollen Sie multiplitzieren:");
scanf ("%d", &zahl5);

if (zahl5==1)
{
    printf ("Geben Sie die erste Zahl ein: ");
scanf ("%d", &zahl1);

printf ("Geben Sie die zu multiplizierende Zahl ein: ");
scanf ("%d", &zahl2);

printf ("Das Ergenis ist %d\n", zahl1*zahl2);
}

printf("Wollen Sie dividieren:");
scanf ("%d", &zahl6);

if (zahl6==1)
{
    printf ("Geben Sie die erste Zahl ein: ");
scanf ("%lf", &zahl7);

printf ("Geben Sie die zu diffidierende Zahl ein: ");
scanf ("%lf", &zahl8);
printf ("Das Ergenis ist %f\n", zahl7/zahl8);

}

printf ("Wollen Sie die Mehrwertsteuer berechnen: ");
scanf ("%d", &zahl9);

if (zahl9==1)
{
    printf ("Geben Sie den Betrag ein um die Mehrwertsteuer ermitteln zu lassen:");
    scanf ("lf",&zahl);

    printf ("Die Mehrwertsteuer betraegt: %f\n", mhw (zahl));
}



return 0;

}




Vielen Dank!!

Re: #define funktioniert nicht, warum?? tut.at

Verfasst: So Jan 24, 2010 5:13 pm
von nufan

Code: Alles auswählen

#define mhw (a) ((a*19)/100)
Bei der Deklaration müssen die Parameter des Makros direkt nach dem Namen folgen, also kein Leerzeichen wie das bei dir der Fall ist. Weiters fehlt beim scanf bei der Mehrwertsteuerberechnung das %.
Die Variablen für die Abfrage ob der Benutzer die Berechnung ausführen will kannst du dir bis auf 1 auch sparen, die du dann immer überschreibst.

Re: #define funktioniert nicht, warum?? tut.at

Verfasst: So Jan 24, 2010 5:22 pm
von dragonfloez
Hallo dani93,
vielen Dank für deine schnelle und kompetente Hilfe und den Tipp. :D .

Ich habe noch das Problem das mein Programm, wenn ich es über den Windows Explorer (.exe) starte, führt es alles aus und nach der letzten Berechnung wird das Ergebnis angezeigt, aber das Programm sofort geschlossen. So kann ich nie richtig das Ergebnis ablesen.

Hast du da einen Tipp für mich??

Re: #define funktioniert nicht, warum?? tut.at

Verfasst: So Jan 24, 2010 5:23 pm
von stampuhh

Code: Alles auswählen

system("PAUSE");
vor return schreiben sollte helfen ;)

gruß stampuhh

Re: #define funktioniert nicht, warum?? tut.at

Verfasst: So Jan 24, 2010 5:26 pm
von nufan
Wir haben dafür einen FAQ-Eintrag:
http://tutorial.proggen.org/doku.php?id ... disappears
Du kannst auch einfach am Ende des Programms (vor dem return) ein getchar () einfügen, dann solltest du aber auch den Eingabe-Puffer leeren:
http://tutorial.proggen.org/doku.php?id ... put-puffer

Re: #define funktioniert nicht, warum?? tut.at

Verfasst: So Jan 24, 2010 5:52 pm
von dragonfloez
Hallo Leute,
so macht programmieren lernen Spass. Nochmals vielen Dank für eure Hilfe!!

Re: #define funktioniert nicht, warum?? tut.at

Verfasst: Mo Jan 25, 2010 2:02 pm
von dragonfloez
Hallo Leute,
hätte noch eine Frage zu dem Thema. Was spricht eigentlich gegen diese Lösung:

Code: Alles auswählen


printf ("Programm beenden: ");
scanf ("%d", &zahl3);

if (zahl3==1)

{ printf ("Ende");}

und dann halt die .exe öffnen.
Vielen Dank!!

Re: #define funktioniert nicht, warum?? tut.at

Verfasst: Mo Jan 25, 2010 3:12 pm
von Xin
dragonfloez hat geschrieben:Hallo Leute,
hätte noch eine Frage zu dem Thema. Was spricht eigentlich gegen diese Lösung:
Das:

Code: Alles auswählen

scanf ("%d", &zahl3);
scanf ist gefährlich.


Dein Programm sollte das tun, was es tun soll. Nicht mehr. Also wenn es getan hat, was es tun soll, dann sollte es auch keine überflüssigen Abfragen mehr Stellen. In dem Fall überdenke Deine Testmöglichkeiten und starte das Programm zum Beispiel aus der Konsole.

Re: #define funktioniert nicht, warum?? tut.at

Verfasst: Mo Jan 25, 2010 4:03 pm
von dragonfloez
Hallo,
ok werde es überdenken. Danke für den Hinweis.

Re: #define funktioniert nicht, warum?? tut.at

Verfasst: Mi Jan 27, 2010 5:55 pm
von dragonfloez
Hallo,
bei mit hat sich im laufe des Tutorials nochmal eine Frage zu define aufgetan.

Wiso funktionier das define in diesem Programm nicht??

Code: Alles auswählen

#include <stdio.h>
# define ms(a)((a*19)/100)
int main ()
{

    int zahl1=0, zahl2=1;
    double zahl, zahl5, zahl6;
    float zahl3=0,zahl4=0;

    while (zahl2==1)
    {

    printf ("1 Druecken um zu addieren\n");
    printf ("2 Druecken um zu subtrahieren\n");
    printf ("3 Druecken um zu multiplitzieren\n");
    printf ("4 Druecken um zu dividieren\n");
    printf ("5 Druecken um die Mehrwertsteuer zu berrechnen\n\n");

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



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

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

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

        case 4: printf ("Geben Sie die erste Zahl ein:");
        scanf ("%lf", &zahl5);
        printf ("Geben Sie die zweite Zahl ein: ");
        scanf ("%lf", &zahl6);
        printf ("Das Ergebnis lautet: %lf\n", zahl5/zahl6);
        break;

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

        case 6: printf ("Beenden..");
        zahl2=0;
        break;

        default: printf ("Geben Sie 1,2,3,4,5,6 ein\n");

    }

    }

    return 0;
}







Hilfe erbeten!