#define funktioniert nicht, warum?? tut.at

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

#define funktioniert nicht, warum?? tut.at

Beitrag von dragonfloez » So Jan 24, 2010 4:30 pm

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!!

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

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

Beitrag von nufan » So Jan 24, 2010 5:13 pm

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.

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

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

Beitrag von dragonfloez » So Jan 24, 2010 5:22 pm

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??

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

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

Beitrag von stampuhh » So Jan 24, 2010 5:23 pm

Code: Alles auswählen

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

gruß stampuhh
NachDenkSeiten.de

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

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

Beitrag von nufan » So Jan 24, 2010 5:26 pm

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

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

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

Beitrag von dragonfloez » So Jan 24, 2010 5:52 pm

Hallo Leute,
so macht programmieren lernen Spass. Nochmals vielen Dank für eure Hilfe!!

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

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

Beitrag von dragonfloez » Mo Jan 25, 2010 2:02 pm

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!!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » Mo Jan 25, 2010 3:12 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

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

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

Beitrag von dragonfloez » Mo Jan 25, 2010 4:03 pm

Hallo,
ok werde es überdenken. Danke für den Hinweis.

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

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

Beitrag von dragonfloez » Mi Jan 27, 2010 5:55 pm

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!

Antworten