home *** CD-ROM | disk | FTP | other *** search
- /*****
- * WORDCNT.C - Sample program for the debugging tutorial
- *
- * Copyright (c) 1988 Borland International. All rights reserved.
- *
- * NOTE: This program is for use with the debugging tutorial
- * in the debugging chapter of the User's Guide. It
- * intentionally contains bugs.
- ******/
-
- #include <stdio.h>
- #include <ctype.h>
-
- #define MAXWORDLEN 16
- #define NUL ((char)0)
- #define SPACE ((char)0x20)
-
- /*****
- * Find the next word in the line buffer.
- * IN: wordptr points to the first character of a word or a preceding
- * space.
- * RETURN: A pointer to the first character of the word. If there are no
- * more words, a pointer to the terminating NUL.
- *****/
- char *nextword(char *wordptr)
- {
- /* Advance to the first non-space. */
- while ( *wordptr==SPACE )
- wordptr++;
- return(wordptr);
- }
-
-
- /*****
- * Find the length of a word. A word is defined as a sequence of characters
- * terminated by a space or a NUL.
- * IN: wordptr points to a word.
- * RETURN:The length of the word.
- *****/
- int wordlen(char *wordptr)
- {
- char *wordlimit;
- wordlimit = wordptr;
- while ( *wordlimit & *wordlimit!=SPACE )
- wordlimit++;
- return( wordlimit-wordptr );
- }
-
-
- /*****
- * The main function.
- *****/
- void main(void)
- {
- FILE *infile; /* Input file. */
- char linebfr[1024], /* Input line buffer, very long for safety. */
- *wordptr; /* Pointer to next word in linebfr. */
- int i; /* Scratch variable. */
- static int wordlencnt[MAXWORDLEN],
- /* Word lengths are counted in elements 1 to
- MAXWORDLEN. Element 0 isn't used. The array is
- static so that the elements need not be set to
- zero at run time. */
- overlencnt; /* Overlength words are counted here. */
-
- printf("WARNING: This is an example program for the practice\n");
- printf("debugging session. If you are not running this under the\n");
- printf("Integrated Development Environment press control-break now.\n");
- printf("See the debugging chapter of the User's Guide for details.\n\n");
-
- printf( "Enter the input file's name: " );
- gets(linebfr);
- if ( !strlen(linebfr) ) {
- printf( "You must specify an input file name!\n" );
- exit();
- }
-
- infile = fopen( linebfr, "r" );
- if ( !infile ) {
- printf( "Can't open input file!\n" );
- exit();
- }
-
- /* Each loop processes one line. NOTE: if a line is longer than the
- input buffer the program may produce invalid results. The very large
- buffer makes this unlikely. */
- while ( fgets( linebfr, sizeof(linebfr), infile ) ) {
- printf("%s\n",linebfr);
- /* Check for buffer overflow & remove the trailing newline. */
- i = strlen(linebfr);
- if ( linebfr[i-1] != '\n' )
- printf( "Overlength line beginning\n\t%70s\n", linebfr );
- else
- linebfr[i-1] = NUL;
-
- /* lineptr points to the 1st word in linebfr (past leading spaces). */
- wordptr = nextword(linebfr);
-
- /* Each loop processes one word. The loop ends when [nextword]
- returns NULL, indicating there are no more words. */
- while (*wordptr) {
- /* Find the length of this word, increment the proper element of the
- length count array, & point to the space following the word. */
- i = wordlen(wordptr);
- if ( i > MAXWORDLEN )
- overlencnt++;
- else
- ;
- wordlencnt[i]++;
- wordptr += i;
-
- /* Find the next word (if any). */
- wordptr = nextword(wordptr);
- }
- }
-
- /* Print the word length counts. Each loop prints one. */
- printf( " Length Count\n" );
- for ( i=1; i<MAXWORDLEN; i++ )
- printf( " %5d %5d\n", i, wordlencnt[i] );
- printf( "Greater %5d\n", overlencnt );
-
- /* Close the file & quit. */
- fclose(infile);
- }