[C] Quersumme wird nicht von Kommazahlen berechnet

#1
Hallo, hab folgenden Quellcode um die Quersumme von 3 unterschiedlichen Zahlen zu berechnen und die dann anschließend zu sortieren, jedoch packt er keine Komma Zahlen zu berechnen, zB von 3,5 gibt er nur 3 aus. Ich habe bestimmt eine Kleinigkeit übersehen nur.

C:
#include <stdio.h>
#include <stdlib.h>

int main()
{
   long quotient, qu1, qu2;  //Einlesen der Variabeln x, y, z
   int quersumme = 0, quo1 = 0, quo2 = 0;  //Variabel für das Endergebnis
   int rest = 0, rest1 = 0, rest2 = 0;  //Variabel für Zwischenrechnung
   int swap, i;  //Variabel zum Sortieren und Zählen

   printf("\nQ u e r s u m m e n   b e r e c h n e n\n");
   printf("=========================================\n\n");

   //Eingabe der Zahl x
   do {
   printf("Geben Sie die erste Zahl (x) ein: ");
   scanf("%ld", &quotient);

   //leeren des stdin, da sonst ungewollt eine Endlosschleife ist
   while (getchar() != '\n');

   //Zahl keine natürliche Zahl, Fehlermeldung anzeigen
   if (quotient<0){
    printf("\nFehler! Keine natuerliche Zahl eingegeben fuer die Zahl x.\n");
   }}
   while (quotient<0);

   //Zaehlerschleife für 3 Stellen (zB 345)
   for(i = 0; i < 3; i++) {

        while(quotient > 0) {

            quersumme = quersumme + quotient % 10;
            quotient /= 10;
        }}

   //Eingabe der Zahl y
   do {
   printf("Geben Sie die zweiten Zahl (y) ein: ");
   scanf("%ld", &qu1);

   //leeren des stdin
   while (getchar() != '\n');

   //Zahl keine natürliche Zahl, Fehlermeldung anzeigen
   if (qu1<0){
    printf("\nFehler! Keine natuerliche Zahl eingegeben, fuer die Zahl y.\n");
   }}
   while (qu1<0);

   //Zaehlerschleife für 3 Stellen (zB 345)
   for(i = 0; i < 3; i++) {

        while(qu1 > 0) {

            quo1 = quo1 + qu1 % 10;
            qu1 /= 10;
        }}

   //Eingabe der Zahl z
   do {
   printf("Geben Sie die dritte Zahl (z) ein: ");
   scanf("%ld", &qu2);

   //leeren des stdin
   while (getchar() != '\n');

   //Zahl keine natürliche Zahl, Fehlermeldung anzeigen
   if (qu2<0){
    printf("\nFehler! Keine natuerliche Zahl eingegeben, fuer die Zahl z.\n");
   }}
   while (qu2<0);

   //Zaehlerschleife für 3 Stellen (zB 345)
   for(i = 0; i < 3; i++) {

        while(qu2 > 0) {

            quo2 = quo2 + qu2 % 10;
            qu2 /= 10;
        }}

   //Ausgaben von den Quersummen von den Zahlen x, y, z
   printf("\nQuersummen:");
   printf("\nQuersumme von x lautet (sx): %d", quersumme);
   printf("\nQuersumme von y lautet (sy): %d", quo1);
   printf("\nQuersumme von u lautet (sz): %d\n\n", quo2);

   //Vergleichen und sortieren der Zahl x und z
   if(quo2 > quersumme) {swap = quersumme;quersumme = quo2;quo2 = swap;}

   //Vergleichen und sortieren der Zahl x und y
   if(quo1 > quersumme) {swap = quersumme;quersumme = quo1;quo1 = swap;}

   //Vergleichen und sortieren der Zahlen y und z
   if(quo2 > quo1) {swap = quo2;quo2 = quo1;quo1 = swap;}

   // Ausgabe Quersumme in sortierter Reihenfolge
   printf("Quersummen nach absteigendem Wert sortiert lauten: %d, %d, %d.\n", quersumme,quo1,quo2);


   return 0;
}
 

asc

Well-Known Member
c-b Experte
#6
int und long können nur Ganzzahlen speichern, entsprechend ist das in deinem Programm nicht möglich.
Wenn du Gleitkommazahlen einlesen und berechnen möchtest benötigst du float oder double.
 
#7
int und long können nur Ganzzahlen speichern, entsprechend ist das in deinem Programm nicht möglich.
Wenn du Gleitkommazahlen einlesen und berechnen möchtest benötigst du float oder double.
Achja stimmt ja sorry. Dann ist das von deren Testeingaben extra so gemacht worden.
Wir haben nämlich immer Testeingaben die wir eintippen sollen und schauen sollen wie das Programm dann darauf reagiert.
 

German

Well-Known Member
c-b Experte
#10
Das ist Nonsens. Wir reden dann von Fließkommazahlen mit den bekannten Rundungsfehlern. Von wie vielen Stellen soll dann also die Summe gebildet werden? Das Ergebnis ist unvorhersehbar und somit kann man sich den Blödsinn auch gleich sparen.
Wikipedia:
Als Quersumme (oder Ziffernsumme) bezeichnet man üblicherweise die Summe der Ziffernwerte einer natürlichen Zahl.
… und so macht das Sinn.
 
Oben