📄 wc.c
字号:
/* wc - count lines, words and characters Author: David Messer */#include <ctype.h>#include <stdlib.h>#include <stdio.h>/* * * Usage: wc [-lwc] [names] * * Flags: * l - count lines. * w - count words. * c - count characters. * * Flags l, w, and c are default. * Words are delimited by any non-alphabetic character. * * Released into the PUBLIC-DOMAIN 02/10/86 * * If you find this program to be of use to you, a donation of * whatever you think it is worth will be cheerfully accepted. * * Written by: David L. Messer * P.O. Box 19130, Mpls, MN, 55119 * Program (heavily) modified by Andy Tanenbaum */int lflag; /* Count lines */int wflag; /* Count words */int cflag; /* Count characters */long lcount; /* Count of lines */long wcount; /* Count of words */long ccount; /* Count of characters */long ltotal; /* Total count of lines */long wtotal; /* Total count of words */long ctotal; /* Total count of characters */_PROTOTYPE(int main, (int argc, char **argv));_PROTOTYPE(void count, (FILE *f));_PROTOTYPE(void usage, (void));int main(argc, argv)int argc;char *argv[];{ int k; char *cp; int tflag, files; /* Get flags. */ files = argc - 1; k = 1; cp = argv[1]; if (argc > 1 && *cp++ == '-') { files--; k++; /* points to first file */ while (*cp != 0) { switch (*cp) { case 'l': lflag++; break; case 'w': wflag++; break; case 'c': cflag++; break; default: usage(); } cp++; } } /* If no flags are set, treat as wc -lwc. */ if (!lflag && !wflag && !cflag) { lflag = 1; wflag = 1; cflag = 1; } /* Process files. */ tflag = files >= 2; /* set if # files > 1 */ /* Check to see if input comes from std input. */ if (k >= argc) { count(stdin); if (lflag) printf(" %6ld", lcount); if (wflag) printf(" %6ld", wcount); if (cflag) printf(" %6ld", ccount); printf(" \n"); fflush(stdout); exit(0); } /* There is an explicit list of files. Loop on files. */ while (k < argc) { FILE *f; if ((f = fopen(argv[k], "r")) == NULL) { fprintf(stderr, "wc: cannot open %s\n", argv[k]); } else { count(f); if (lflag) printf(" %6ld", lcount); if (wflag) printf(" %6ld", wcount); if (cflag) printf(" %6ld", ccount); printf(" %s\n", argv[k]); fclose(f); } k++; } if (tflag) { if (lflag) printf(" %6ld", ltotal); if (wflag) printf(" %6ld", wtotal); if (cflag) printf(" %6ld", ctotal); printf(" total\n"); } fflush(stdout); return(0);}void count(f)FILE *f;{ register int c; register int word = 0; lcount = 0; wcount = 0; ccount = 0L; while ((c = getc(f)) != EOF) { ccount++; if (isspace(c)) { if (word) wcount++; word = 0; } else { word = 1; } if (c == '\n' || c == '\f') lcount++; } ltotal += lcount; wtotal += wcount; ctotal += ccount;}void usage(){ fprintf(stderr, "Usage: wc [-lwc] [name ...]\n"); exit(1);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -