[решено] Написание кода синтаксического анализа является ловушкой. В строке с 15 пробелами будет 15 слов. Пустые строки также будут считаться словом. Вернуться к гибкости и зубров для меня.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
FILE *fp = NULL;
int iChars =0, iWords =0, iLines =0;
int ch;
/* if there is a command line arg, then try to open it as the file
otherwise, use stdin */
fp = stdin;
if (argc == 2) {
fp = fopen(argv[1],"r");
if (fp == NULL) {
fprintf(stderr,"Unable to open file %s. Exiting.\n",argv[1]);
exit(1);
}
}
/* read until the end of file, counting chars, words, lines */
while ((ch = fgetc(fp)) != EOF) {
if (ch == '\n') {
iWords++;
iLines++;
}
if (ch == '\t' || ch == ' ') {
iWords++;
}
iChars++;
}
/* all done. If the input file was not stdin, close it*/
if (fp != stdin) {
fclose(fp);
}
printf("chars: %d,\twords: %d,\tlines: %d.\n",iChars,iWords,iLines);
}
ТЕСТОВЫЕ ДАННЫЕ foo.sh
#!/home/ojblass/source/bashcrypt/a.out
This is line 1
This is line 2
This is line 3
ojblass @ линукс-rjxl: ~ / источник / bashcrypt>
wc foo.sh
5 13 85 foo.sh
ojblass @ линукс-rjxl: ~ / источник / bashcrypt>
a.out foo.sh
символов: 85, слов: 14, строк: 5.