diff --git a/zahlsys.c b/zahlsys.c index b468409..d93928a 100644 --- a/zahlsys.c +++ b/zahlsys.c @@ -7,26 +7,32 @@ void ausgabeBinaer(int wert) { for (int i = 31; i >= 0; i--) { int bit = (wert >> i) & 1; printf("%d", bit); - if (i % 8 == 0 && i != 0) printf(" "); } printf("\n"); } -int main() +int main(int argc, char *argv[]) { - char eingabe[100] = {"--bo 127 --h"}; + char eingabe[100] = {0}; + + for (int i = 1; i < argc; i++) { + strcat(eingabe, argv[i]); + if (i < argc - 1) + strcat(eingabe, " "); + } char *pptr, *nptr; - int wert; - bool b = false, o = false, h = false; - do{ - if(strchr(eingabe, ' ') == NULL) + char fehlerChar; + int wert, fehlerWert = 0; + bool b = false, o = false, h = false, fehler = false; + do { + if (!(strpbrk(eingabe, " -123456789"))) break; nptr = strchr(eingabe, ' ') + 1; pptr = strtok(eingabe, " "); - if(pptr[0] == '-' && pptr[1]) + if (pptr[0] == '-' && pptr[1] == '-') for (int i = 0; pptr[i]; ++i) { switch (pptr[i]) { case 'b': @@ -38,27 +44,45 @@ int main() case 'h': h = true; break; + case '-': + break; + default: + fehlerChar = pptr[i]; + fehler = true; + break; } } - else if(pptr[0] >= '0' && pptr[0] <= '9') - wert = atoi(pptr); - strcpy(eingabe, nptr); - } while (nptr != NULL); + else if ((pptr[0] >= '0' && pptr[0] <= '9') || (pptr[0] == '-' && pptr[1] != '-')) { + if (fehlerWert == 0) { + wert = atoi(pptr); + fehlerWert++; + } else + fehler = true; + } + if (nptr != NULL + 1) + strcpy(eingabe, nptr); + } while (nptr != NULL + 1); - printf("Dezimal: %d\n", wert); - if(b){ - printf("Dual: "); - ausgabeBinaer(wert); + if (fehler == false) { + printf("Dezimal: %d\n", wert); + if (b) { + printf("Dual: "); + ausgabeBinaer(wert); + } + if (o) + printf("Oktal: %o\n", wert); + if (h) + printf("Hexadezimal: %x\n", wert); + if (b == 0 && o == 0 && h == 0) { + printf("Dual: "); + ausgabeBinaer(wert); + printf("Oktal: %o\n", wert); + printf("Hexadezimal: %x\n", wert); + } + } else if (fehler == true) { + if (fehlerChar) + printf("...... Unerlaubte Option --%c\n", fehlerChar); + if (fehlerWert == 1) + printf("usage: zahlsys [--boh] zahl\n...... Es muss genau eine Zahl angegeben sein\n"); } - if(o) - printf("Oktal: %o\n", wert); - if(h) - printf("Hexadezimal: %x\n", wert); - if(b == 0 && o == 0 && h == 0){ - printf("Dual: "); - ausgabeBinaer(wert); - printf("Oktal: %o\n", wert); - printf("Hexadezimal: %x\n", wert); - } - -} \ No newline at end of file +}