/* Datei calc.c Mini-Rechner "calc", der 3 Kommandozeilenparameter erwartet. Für den ersten Parameter sind die Zeichen +, -, *, / und % zulässig. Die beiden anderen Parameter müssen Ganzzahl-Werte sein. */ #include #include #include int main(int argc, char *argv[]) { int z1, z2, ergebnis; char op; // Anzahl der Parameter korrekt? if (argc < 3) { printf("\nZu wenige Kommandozeilenparameter!\n\n"); printf("Aufruf: calc z1 z2 [+|-|*|/] [-fo|-fh|-fd]\n"); exit(1); } // Operator lesen op = argv[1][0]; // Operanden lesen if (argc == 5) { // oktal if (strcmp(argv[4], "-fo") == 0) { sscanf(argv[2], "%o", &z1); sscanf(argv[3], "%o", &z2); } // hexadezimal else if (strcmp (argv[4], "-fh") == 0) { sscanf(argv[2], "%x", &z1); sscanf(argv[3], "%x", &z2); } } else { // dezimal ist default sscanf(argv[2], "%d", &z1); sscanf(argv[3], "%d", &z2); } // Auf Division durch 0 pruefen if ((z2 == 0) && (op == '/')) { printf ("\nDivision durch 0 nicht moeglich!\n"); exit(1); } // Berechnung durchfuehren switch (op) { case '+': ergebnis = z1 + z2; break; case '-': ergebnis = z1 - z2; break; case '*': ergebnis = z1 * z2; break; case '/': ergebnis = z1 / z2; break; } // Ausgabe im entsprechenden Zahlenformat if (argc == 5) { if (strcmp(argv[4], "-fo") == 0) printf("\nErgebnis: %o", ergebnis); else if (strcmp (argv[4], "-fh") == 0) printf("\nErgebnis: %x", ergebnis); } else printf("\nErgebnis: %d", ergebnis); return 0; }