Forum: PC-Programmierung Einfaches Rechenprogramm finde Fehler nicht


von Max Power (Gast)


Lesenswert?

Servus
soll nun ein einfaches Rechenprogramm in C schreiben. Nur gibt er mir 
für c also das Ergebnis immer 0 aus. woran liegt dass er rechnet mir 
einfach nicht die von mir eingegebenen Zahlen zusammen.

Kann mir jemand kurz helfen?

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "Utilities.h"

int main(void)
{
  float a, b, c;


  _gotoxy (5,5);
  printf ("c=a-4,5*b-b*10.2");

  _gotoxy (5,6);
  printf ("a:");
  _gotoxy (8,6);
  scanf ("%d", &a);        //Einlesen der Variable a

  _clrscr();


  _gotoxy (5,5);
  printf ("c=a-4,5*b-b*10.2");

  _gotoxy (5,6);
  printf ("b:");
  _gotoxy (8,6);
  scanf ("%d", &b);        //Einlesen der Variable b

  _clrscr();


  _gotoxy (5,5);
  printf ("c=a-4,5*b-b*10.2");

  c=a-4,5*b-b*10.2;

  _gotoxy (5,6);
  printf("c = %d");        //Ausgabe der Variable c


  while (_kbhit() == 0);

  return EXIT_SUCCESS;
}

von Max Power (Gast)


Lesenswert?

was ich vergessen habe kommazahlen werden auch nicht akzepiert obwohl 
ich float deklariert habe.

von Peter (Gast)


Lesenswert?

was werden denn für Zahlen für a und b eingeben?


> c=a-4,5*b-b*10.2;
sieht mir nicht nach gültigen C code aus.

von Karl H. (kbuchegg)


Lesenswert?

Max Power schrieb:

>   scanf ("%d", &a);        //Einlesen der Variable a

kram mal dein C Buch raus und sieh nach welcher Buchstabe für float 
wirklich zuständig ist. %d ist es nicht. das ist für int

Ich könnte es dir natürlich auch sagen, aber dann lernst du nichts 
dabei. Insbesondere lernst du nicht, wo die Information findest, wenn du 
sie das nächste mal brauchst.

Immerhin hast du den & richtig. Und das ist schon was (kein Sarkasmus, 
meine ich ehrlich. Das ist nämlich eine der ersten Fallen für Anfänger)

>  c=a-4,5*b-b*10.2;

Hat Peter schon genannt. Nur soviel: In programmiersprachen hat man 
einen Dezimalpunkt und kein Dezimalkomma

>  _gotoxy (5,6);
>  printf("c = %d");        //Ausgabe der Variable c

Aha. Und wo wird da jetzt c tatsächlich ausgegeben, wo kommt da die 
Variable c vor? Mal ganz abgesehen davon das %d für die Variable c schon 
wieder falsch ist.

von Max Power (Gast)


Lesenswert?

och ne das komme bei 4,5 hab ich total übersehen. bei 10,2 ist der Punkt 
ja drinn. Hab schon gewusst dass man Punkt und kein Komma verwendet.

Den rest schau ich jetzt nochmal nach. Danke schon mal.

von Max Power (Gast)


Lesenswert?

alles klar habs gefunden. dass so kleine sachen solch eine wirkung haben 
verblüfft mich immer wieder.

von Karl H. (kbuchegg)


Lesenswert?

Max Power schrieb:
> alles klar habs gefunden. dass so kleine sachen solch eine wirkung haben
> verblüfft mich immer wieder.

Wie ich gerne sage:
Wenn du eine Programmiersprache brauchst, bei der die Tante mit aufs Klo 
geht Lulu machen, dann bist du bei C definitiv falsch :-)

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

>  c=a-4,5*b-b*10.2;

mankanninCauchLeerzeichenverwenden,daserhöhtdieLesbarkeitdesCodesungemei 
n.

von Matthias (Gast)


Lesenswert?

Anmerkung:

Muss man bei der angabe von Fließkommanzahlen nicht ein Suffix "f" 
dranhängen?
1
float x;
2
3
x = 2.2f;

von Klaus W. (mfgkw)


Lesenswert?

nein.

(Bzw. nur in recht seltenen, eher esoterischen Fällen.)

von digit (Gast)


Lesenswert?

wieso nicht, sicher kann man.
Per default ist 2.2 nämlich von Typ double.
Ein float literal kann nur mit 2.2f angegeben werden.

von Karl H. (kbuchegg)


Lesenswert?

digit schrieb:
> wieso nicht, sicher kann man.
> Per default ist 2.2 nämlich von Typ double.
> Ein float literal kann nur mit 2.2f angegeben werden.

Schon.
Aber was soll der Compiler denn Esoterisches daraus erzeugen, wenn er 
den double 2.2 an den float x zuweist? Er wird sicher nicht die double 
Darstellung von 2.2 erzeugen, die irgendwie in den Prozessor laden 
lassen, abschneiden und dann an x zuweisen lassen sondern direkt die 
Binärdarstellung von 2.2 als float nach x speichern lassen.

Die einzige Frage, die sich tatsächlich stellt, ist: Warum wird auf 
einem PC überhaupt mit float gerechnet und nicht gleich mit double. 
float ist nicht schneller, float bringt nicht mehr Auflösung (ganz im 
Gegenteil) und hat auf dem PC eigentlich nur Nachteile, wenn man einmal 
vom geringeren Speicherverbrauch absieht, der hier überhaupt keine Rolle 
spielt.
Aber eigentlich will man float auf einem PC nicht benutzen, wenn man 
nicht einen sehr, sehr guten Grund dafür hat, weiß was man sich damit 
einhandelt und auch über das Wissen verfügt, wie man dieses Biest zähmen 
kann. In allen anderen Fällen benutzt man double.

von Klaus W. (mfgkw)


Lesenswert?

Matthias schrieb:
> Muss man
  ^^^^
Klaus Wachtler schrieb:
> nein.

digit schrieb:
> wieso nicht, sicher kann man.
                      ^^^^

ja.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.