Einfaches Rechenprogramm finde Fehler nicht

Gast #1904765
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;
}
#1904775
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.
Gast #1904794
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.
#1905361
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren