85 lines
2.7 KiB
C
85 lines
2.7 KiB
C
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#define MAX 100
|
|
|
|
typedef struct {
|
|
int vorkomma;
|
|
int nachkomma;
|
|
} Kommazahl;
|
|
|
|
int stringZuInt(char *str) {
|
|
int result = 0;
|
|
for (int i = 0; str[i] != '\0'; i++) {
|
|
if (str[i] >= '0' && str[i] <= '9') {
|
|
result = result * 10 + (str[i] - '0');
|
|
} else {
|
|
return -1; // Ungültiges Zeichen
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
int nachkommaZuInt(char *str) {
|
|
int result = 0;
|
|
int i = 0;
|
|
for (; str[i] != '\0' && i < 6; i++) {
|
|
if (str[i] >= '0' && str[i] <= '9') {
|
|
result = result * 10 + (str[i] - '0');
|
|
} else {
|
|
return -1; // Ungültiges Zeichen
|
|
}
|
|
}
|
|
for (; i < 6; i++) {
|
|
result *= 10;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
int main() {
|
|
char eingabe[MAX];
|
|
int vor = 0, nach = 0;
|
|
Kommazahl zahl;
|
|
Kommazahl summe = {0, 0};
|
|
|
|
printf("Gib Deine Kommazahlen ein (Abschluss mit Leerzeile)\n");
|
|
|
|
while (1) {
|
|
fgets(eingabe, MAX, stdin);
|
|
eingabe[strcspn(eingabe, "\n")] = '\0'; //Ersetzt "\n"(Abbruchbedingung) mit '\0', damit das Programm nicht abbricht
|
|
|
|
if (strlen(eingabe) == 0)
|
|
break; // Wenn die Eingabe nach dem Entfernen von "\n" leer ist, wird das Programm abgebrochen
|
|
|
|
char *kommaPos = strchr(eingabe, ','); // Erstellt einen Zeiger auf den Speicher wo das Komma des Strings liegt
|
|
if (kommaPos != NULL) {
|
|
*kommaPos = '\0'; // Ersetzt das Komma mit '\0' um den String in zwei Teile zu splitten
|
|
char *nachkommateil = kommaPos + 1; // setzt einen Pointer auf den Anfang der Nachkommastellen
|
|
|
|
zahl.vorkomma = stringZuInt(eingabe); //Wandelt den String in einen Int um und speichert den Wert im Struct
|
|
zahl.nachkomma = nachkommaZuInt(nachkommateil);
|
|
} else { // Damit bei einer ganzzahligen Zahl nicht die nachkomma Zahl als Fehleingabe deklariert wird, wird hier nur die vorkomma Zahl zum Int konvertiert
|
|
zahl.vorkomma = stringZuInt(eingabe);
|
|
zahl.nachkomma = 0;
|
|
}
|
|
|
|
if (zahl.vorkomma == -1 || zahl.nachkomma == -1) {
|
|
printf("Ungültige Zahl: %s\n", eingabe);
|
|
continue;
|
|
}
|
|
|
|
summe.vorkomma += zahl.vorkomma;
|
|
summe.nachkomma += zahl.nachkomma;
|
|
|
|
vor += zahl.vorkomma; // Für die Ausgabe unten, ohne den addierten Überlauf
|
|
nach += zahl.nachkomma;
|
|
|
|
if (summe.nachkomma >= 1000000) { // Addiert den überlauf der nachkomma Zahl auf die Vorkommazahl
|
|
summe.vorkomma += 1;
|
|
summe.nachkomma -= 1000000;
|
|
}
|
|
}
|
|
|
|
printf("= %d,%06d (%d, %d) ..... Kontrollwert: %d.%06d\n",
|
|
summe.vorkomma, summe.nachkomma, vor, nach, summe.vorkomma, summe.nachkomma);
|
|
} |