Informatik2_Pr/kommaadd.c
2025-05-06 21:18:23 +02:00

124 lines
2.6 KiB
C

/*#include <stdio.h>
typedef struct
{
unsigned vorkomma;
unsigned nachkomma;
}Komma;
void additionVor(Komma p){
int vor = 0;
vor+= p.vorkomma;
}
void printKomma(Komma x)
{
printf("%u,%u", x.vorkomma,x.nachkomma);
};
int main(){
int vor;
int tmp, nach;
//printf("Vorkomma: %d\nNachkomma: %f", vorkomma, nachkomma);
printf("Gib Deine Kommazahlen ein (Abschluss mit Leerzeile)");
scanf("%d", &tmp);
vor = (int)tmp;
nach = tmp - vor;
Komma zahl = {vor,nach};
additionVor(zahl);
printKomma(zahl);
}*/
#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';
if (strlen(eingabe) == 0) break;
char *kommaPos = strchr(eingabe, ',');
if (kommaPos != NULL) {
*kommaPos = '\0';
char *nachkommateil = kommaPos + 1;
zahl.vorkomma = stringZuInt(eingabe);
zahl.nachkomma = nachkommaZuInt(nachkommateil);
} else {
// Nur ganzzahliger Teil
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;
nach += zahl.nachkomma;
if (summe.nachkomma >= 1000000) {
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);
return 0;
}