#include #include #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); }