checkeq.c

来自「unix v7是最后一个广泛发布的研究型UNIX版本」· C语言 代码 · 共 100 行

C
100
字号
#include <stdio.h>FILE	*fin;int	delim	= 0;/* today's version assumes no delimiters;they must be explicitly set*/main(argc, argv) char **argv; {	while (argc > 1 && argv[1][0] == '-') {		switch (argv[1][1]) {		case 'd':			delim = argv[1][2];			break;		}		argc--;		argv++;	}	if (argc <= 1)		check(stdin);	else		while (--argc > 0) {			if ((fin = fopen(*++argv, "r")) == NULL) {				printf("Can't open %s\n", *argv);				exit(1);			}			printf("%s:\n", *argv);			check(fin);			fclose(fin);		}}check(f)FILE	*f;{	int start, line, eq, ndel, totdel;	char in[600], *p;	start = eq = line = ndel = totdel = 0;	while (fgets(in, 600, f) != NULL) {		line++;		ndel = 0;		for (p = in; *p; p++)			if (*p == delim)				ndel++;		if (*in=='.' && *(in+1)=='E' && *(in+2)=='Q') {			if (eq++)				printf("   Spurious EQ, line %d\n", line);			if (totdel)				printf("   EQ in %c%c, line %d\n", delim, delim, line);		} else if (*in=='.' && *(in+1)=='E' && *(in+2)=='N') {			if (eq==0)				printf("   Spurious EN, line %d\n", line);			else				eq = 0;			if (totdel > 0)				printf("   EN in %c%c, line %d\n", delim, delim, line);			start = 0;		} else if (eq && *in=='d' && *(in+1)=='e' && *(in+2)=='l' && *(in+3)=='i' && *(in+4)=='m') {			for (p=in+5; *p; p++)				if (*p != ' ') {					if (*p == 'o' && *(p+1) == 'f')						delim = 0;					else {						delim = *p;						ndel = totdel = 0;					}					break;				}			if (delim == 0)				printf("   Delim off, line %d\n", line);			else				printf("   New delims %c%c, line %d\n", delim, delim, line);		}		if (ndel > 0 && eq > 0)			printf("   %c%c in EQ, line %d\n", delim, delim, line);		if (ndel == 0)			continue;		totdel += ndel;		if (totdel%2) {			if (start == 0)				start = line;			else {				printf("   %d line %c%c, lines %d-%d\n", line-start+1, delim, delim, start, line);				start = line;			}		} else {			if (start > 0) {				printf("   %d line %c%c, lines %d-%d\n", line-start+1, delim, delim, start, line);				start = 0;			}			totdel = 0;		}	}	if (totdel)		printf("   Unfinished %c%c\n", delim, delim);	if (eq)		printf("   Unfinished EQ\n");}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?