mikrocontroller.net

Forum: PC-Programmierung Einfaches Rechenprogramm finde Fehler nicht


Autor: Max Power (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
}

Autor: Max Power (Gast)
Datum:

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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Max Power (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Max Power (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Wegstaben Verbuchsler (wegstabenverbuchsler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  c=a-4,5*b-b*10.2;

mankanninCauchLeerzeichenverwenden,daserhöhtdieLesbarkeitdesCodesungemei 
n.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anmerkung:

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

x = 2.2f;

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein.

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

Autor: digit (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias schrieb:
> Muss man
  ^^^^
Klaus Wachtler schrieb:
> nein.

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

ja.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.