Anfänger Problem mit C

Das liegt an den floats. Die können sowas wie 0.1 nicht exakt darstellen. Daher wird dein cm auch nicht genau Null.
Es wundert mich eigentlich, daß das nicht explodiert.
Für Geldbeträge immer ganzzahlige Variablen(z.B. int) nehmen. Du rechnest dann einfach in Cent und paßt lediglich die Ausgabe an.
 
(Jup, auch grad gemerkt, das sogar bei den einfachen Beträgen Rundungsfehler auftreten :D)

Also, den argv-Parameter kannst du noch als float nehmen, aber dann *100
und mit Cent-int weitermachen...
 
jop danke an euch 2 funktioniert jetzt, bin auch relativ zufrieden mit den testfällen einer ist jedoch aufgetaucht beim das prog wieder in einer endlos schleife hengt und zwar bei 9,89 bei 1,89 oder 0,89 funktioniert es wiederrum ...komisch irgendwie
 
Hier mein aktueller Code :)
Nochmals danke für die Mühe! Is echtn geiles Board hier :D
Code:
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char* argv[])
{
  float cm = atof(argv[1]);    
  if(argc != 2 || !sscanf(argv[1], "%f", &cm))
  {
          printf("Please only use numbers als params \n");
          return;
  }    
  int i = 0;
  int values[]={200, 100, 50, 20, 10, 5, 2, 1};  
  int numberOf[]={0,0,0,0,0,0,0,0};
  cm = cm * 100;
  while (cm != 0)
  {
    if (cm >= values[i])
    {
      cm = cm - values[i];
      numberOf[i] = numberOf[i] + 1;
    }
    else
    {
      i = i+1;
    }    
  }
  printf(" 2 Euro x %d\n", numberOf[0]);
  printf(" 1 Euro x %d\n", numberOf[1]);
  printf("50 Cent x %d\n", numberOf[2]);
  printf("20 Cent x %d\n", numberOf[3]);
  printf("10 Cent x %d\n", numberOf[4]);
  printf(" 5 Cent x %d\n", numberOf[5]);
  printf(" 2 Cent x %d\n", numberOf[6]);
  printf(" 1 Cent x %d\n", numberOf[7]);
 
Du rechnest ja noch immer mit dem float cm :)
Mach statt
C++:
  float cm = atof(argv[1]);    
  if(argc != 2 || !sscanf(argv[1], "%f", &cm))
  {
          printf("Please only use numbers als params \n");
          return;
  }
das:
C++:
  float cmf = atof(argv[1]);    
  if(argc != 2 || !sscanf(argv[1], "%f", &cmf) || cmf < 0.0)
  {
          printf("Please only a number as params \n");
          return;
  }   
  int cm = (int)(cmf * 100.0);
und dafür weiter unten die Zeile mit *100 weg.
(Hab auch noch eine weitere Prüfung gemacht, ob die Zahl positiv ist)

Übrigens, die vielen printf am Schluss passen doch gut zu einer Schleife :)
 
Zurück