#include #include #include int main() { int format = fgetc(stdin); if (format == EOF || (format != 'l' && format != 'u')) { // Der Fall, dass das erste Zeichen weder 'u' noch 'l' ist, sollte // besser auch abgefangen werden, damit der Benutzer eine sinnvolle // Fehlermeldung (und nicht gar nichts) sieht. fprintf(stderr, "input must start with 'u' or 'l'\n"); exit(EXIT_FAILURE); } int c; // Kein "char", da sonst Fehlerbehandlung (Vergleich mit EOF) nicht // moeglich waere! while ((c = fgetc(stdin)) != EOF) { char converted; if (format == 'l') { converted = tolower(c); } else if (format == 'u') { converted = toupper(c); } // Zur Konvertierung gibt es auch einige Alternativen, z.B.: // c - 0x20 // c - ('a' - 'A') // ^ analog mit + statt - if (fputc(converted, stdout) == EOF) { perror("fputc"); exit(EXIT_FAILURE); } } // Falls fgetc(3) EOF zurueckgibt, kann es sich um das Ende der Eingabe // (Ctrl + d) handeln, aber auch um einen Fehler. Zwischen diesen beiden // Situationen unterscheidet man mit ferror(3) bzw. feof(3). if (ferror(stdin)) { perror("fgetc"); exit(EXIT_FAILURE); } // fflush(3) *mit* Fehlerbehandlung, damit auf keinen Fall Fehler unbemerkt // auftreten. if (fflush(stdout) == EOF) { perror("fflush"); exit(EXIT_FAILURE); } }