/* CAT.C Version 2 24.05.92 */ #include #include #define MAXIMALE_ANZAHL_ZEICHEN_PRO_ZEILE 256 /* Speicher fuer eine Zeile aus einer Datei (mit Reserve) */ char buffer[ MAXIMALE_ANZAHL_ZEICHEN_PRO_ZEILE + 1 ]; int main ( int anzahl_der_argumente, char *feld_der_argumente[] ) { int index; FILE *datei_zeiger; int fehler; /* Hier kommen meine neuen Variablen */ int anzahl_der_dateien = 0; long anzahl_der_zeilen = 0; long anzahl_der_zeichen = 0; /* Ist etwas gegen die sofortige Initialisierung einzuwenden? */ if ( anzahl_der_argumente <= 0 ) { printf( " Unmoeglicher Fehler, Anzahl <= 0\n" ); exit( 1 ); }; /* Schleife ueber alle Parameter ( Dateinamen ) */ for ( index = 1; index < anzahl_der_argumente; index ++ ) { /* nun wird die Variabe durch das Oeffnen der Datei mit 'fopen' im Textmodus zum lesen ("r") gesetzt */ datei_zeiger = fopen( feld_der_argumente[ index ], "r" ); /* testen ob der Zeiger gueltig ist */ if ( datei_zeiger == NULL ) { printf( "Die Datei %s wurde nicht gefunden.\n", feld_der_argumente[ index ] ); exit( 1 ); /* Programmende */ }; /* Wenn der Dateizeiger gueltig ist, dann werde ich mal einen Apfel dazuzaehlen */ ++ anzahl_der_dateien; /* innerhalb der Bedingung dieser Schleife wird geprueft, ob das Ende der Datei erreicht ist. Dazu wird die Funktion 'feof' aufgerufen. Die Schleife wird verlassen, wenn das Ende der Datei erreicht ist. */ while ( feof( datei_zeiger) == 0 ) { /* nun lesen wir eine Zeile ein, ist eine Zeile laenger als angegeben, so wird sie abgeschnitten */ fgets( buffer, MAXIMALE_ANZAHL_ZEICHEN_PRO_ZEILE, datei_zeiger ); /* pruefe ob ein Fehler aufgetreten ist */ if ( ferror( datei_zeiger ) != 0 ) { printf( "Lesefehler in Datei %s.\n", feld_der_argumente[ index ] ); exit( 1 ); /* Programmende */ }; /* ohne Zeilenvorschub ausgeben */ printf( "%s", buffer ); /* die Zeile ist auf dem Moni und so soll sie uns in der Rechnung nicht entgehen! */ ++ anzahl_der_zeilen; anzahl_der_zeichen += strlen(buffer); }; /* fertig, Datei schliessen */ fehler = fclose( datei_zeiger ); if ( fehler != 0 ) { printf( "Die Datei %s wurde nicht geschlossen.\n", feld_der_argumente[ index ] ); exit( 1 ); /* Programmende */ } /* naechsten Parameter berabeiten */ }; /* wenn nichts schief gelaufen ist sollte der Programm-Counter jetzt irgendwo hier vorbeikommen */ printf( "\nIch habe jetzt %d Dateien\n", anzahl_der_dateien ); printf( "mit insgesamt %ld Zeilen und\n", anzahl_der_zeilen ); printf( "summa sumarum %ld Zeichen zum Bildschirm geschickt.\n", anzahl_der_zeichen ); /* endlich fertig */ return 0; } /* ENDE DER DATEI */