home *** CD-ROM | disk | FTP | other *** search
- /* WCOUNT.C - Ein Beispielprogramm für die Verwendung
- des integrierten Debuggers
-
- Copyright (c) 1988 Borland International. "All rights reserved."
-
- */
-
- #include <stdio.h>
- #include <string.h>
- #include <process.h>
- #include <ctype.h>
-
- #define MAXWORDLEN 16 /* maximale Länge eines Wortes */
- #define NUL ((char)0) /* Endemarke (Nullzeichen) */
- #define SPACE ((char)0x20) /* Trennzeichen zwischen Wörtern */
-
- char *nextword(char *lineptr)
- {
- while (*lineptr==SPACE) /* Solange der Zeiger auf ein Leerzeichen */
- lineptr++; /* zeigt, wird er erhöht */
- return(lineptr); /* Ergebnis: Zeiger auf das */
- } /* nächste "Nicht-Leerzeichen" */
-
- int wordlen(char *wordstart)
- { char *charptr; /* Arbeitszeiger */
-
- charptr = wordstart; /* Arbeitszeiger auf den übergebenen Startwert */
- while (*charptr & /* Solange das "momentane" Zeichen != NUL */
- *charptr != SPACE) /* und != SPACE ist: */
- charptr++; /* Arbeitszeiger auf das nächste Zeichen */
- return(charptr-wordstart); /* Ergebnis: Wortende - Start = Länge */
- }
-
- /************ Hauptprogramm *****************/
- void main(void)
- { FILE *infile; /* Eingabedatei */
- char linebuf[1024]; /* "momentane Zeile" */
- char *lineptr; /* Zeiger auf das erste/nächste Wort in linebuf */
- int i; /* für Schleifen usw. */
- static int wordlens[MAXWORDLEN], /* speichert die Wortlängen */
- longwords; /* Für Wörter > MAXWORDLEN */
-
- printf("VORSICHT! WCOUNT.C ist ein Übungsprogramm für den\n");
- printf("Debugger von Turbo C. Wenn Sie dieses Programm *nicht*\n");
- printf("von der integrierten Entwicklungsumgebung aus gestartet haben,\n");
- printf("dann drücken Sie bitte jetzt Ctrl-Break - ansonsten hängt sich\n");
- printf("das System auf.\n");
- printf("Informationen finden Sie in Kapitel 4 des Benutzerhandbuchs.\n");
-
- printf( "Geben Sie den Namen der Textdatei ein (WCOUNT.DAT): ");
-
- gets(linebuf); /* linebuf wird hier "mißbraucht" */
- if (!strlen(linebuf)) /* nur RETURN gedrückt? */
- strcpy(linebuf, "WCOUNT.DAT"); /* Standardvorgabe einsetzen */
-
- infile = fopen(linebuf, "r"); /* Öffnen der Datei */
- if (!infile)
- { printf( "Fehler beim Öffnen von %s\n", linebuf);
- exit(1);
- }
-
- while (fgets(linebuf, sizeof(linebuf), infile)) /* Lesen einer Zeile */
- { printf("%s",linebuf); /* Ausgabe */
- /* Prüfung des Pufferendes und Entfernen des abschließenden \n */
- i = strlen(linebuf); /* Länge der Zeile */
- if (linebuf[i-1] != '\n' ) /* Zeilenvorschub als letztes Zeichen? */
- printf( "Beginn einer überlangen Zeile:\n\t%70s\n", linebuf );
- else
- linebuf[i-1] = NUL; /* O.K. - Zeilenvorschub durch NUL ersetzen */
-
- lineptr = nextword(linebuf); /* Ermitteln des ersten Wortanfangs */
-
- while (*lineptr)
- { i = wordlen(lineptr); /* Bestimmung der Wortlänge */
- if (i > MAXWORDLEN) /* größer als MAXWORDLEN? */
- longwords++; /* ja - wird als "langes Wort" gespeichert */
- else
- ; /* sonst den entsprechenden Zähler erhöhen */
- wordlens[i]++;
- lineptr += i; /* Zeiger um die Wortlänge erhöhen */
-
- lineptr = nextword(lineptr); /* gibt es ein weiteres Wort? */
- } /* while (*lineptr) */
- } /* while (fgets...) */
-
- printf( " Länge Anzahl\n" ); /* Ausgabe der Wortlängen */
- for ( i=1; i<MAXWORDLEN; i++ )
- printf( " %5d %5d\n", i, wordlens[i] );
- printf( "Überlange Wörter: %5d\n", longwords);
-
- /* Schließen der Datei und Programmende */
- fclose(infile);
- }