下面的程序将会读取文本文件中的每一行数据,并统计该行的字符数目和单词数目;程序最后,会输出总共读取的行数。
该程序构建完成后需要在命令行工具(cmd.exe)中运行,将文件名作为命令行参数传递。
该程序涉及到main()函数传参的问题,请查看:C语言mian()函数详解
#include <stdio.h>
int main (int argc, char *argv[]){
FILE *fp;
int nchars, nwords, nlines;
int lastnblank; // 如果上一个字符为空格,那么该变量的值为 0
char c;
if(argc!=2){
printf("Usage: %s filename\n", argv[0]);
exit(0);
}
if((fp=fopen(argv[1],"r"))==NULL){
perror("fopen");
exit(0);
}
nchars=nwords=nlines=lastnblank=0;
while((c=getc(fp))!=EOF){
nchars++;
if (c=='\n'){
if (lastnblank)
nwords++;
printf("words=%d, characters=%d\n", nwords, nchars);
nchars=nwords=lastnblank=0;
nlines++;
}else{
if (((c==' ')||(c=='\t'))&(lastnblank))
nwords++;
lastnblank=((c!=' ')&&(c!='\t'));
}
}
printf("lines=%d\n", nlines);
fclose(fp);
}
在D盘创建一个文件 demo.txt,包含如下的内容:
城东书院
C language for China
http://www.cdsy.xyz/
Welcom to our website !
例如,我构建后的程序在 E:\cDemo\Debug\ 中,那么命令行输入截图如下:
注意:demo.txt 最后必须有一个空行,因为程序是以 '\n' 来判断换行的,如果最后没有空行,最后一行数据是读取不到的。