scan2.c

来自「UNIX v6源代码 这几乎是最经典的unix版本 unix操作系统设计和莱」· C语言 代码 · 共 112 行

C
112
字号
_Iint (iptr, length, numbase)	int *iptr, length;{	int n, minus, numdig;	extern int _Isfil, (*_Iungc)(), (*_Igetc)();	int c, dval;n = minus = numdig = 0;switch ((c=_Inxch()))	{	case '-': minus = 1;	case '+': break;	default: (*_Iungc)(c,_Isfil);	}while ((dval=_Idigt(c=((*_Igetc)(_Isfil)), numbase ) ) >= 0 && numdig++ < length)	n = n*numbase + dval;(*_Iungc)(c,_Isfil);if (numdig == 0)	return (-1);if (iptr == 0)	return (0);*iptr = minus ? -n : n;return (1);}_Idigt (x, base){switch (x)	{	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':		return(x-'0');	case '8':	case '9':		if (base > 8)			return(x - '0');	case 'a':	case 'b':	case 'c':	case 'd':	case 'e':	case 'f':		if (base >10)			return(x - 'a' + 10);	case 'A':	case 'B':	case 'C':	case 'D':	case 'E':	case 'F':		if (base > 10)			return(x-'A' + 10);	}return(-1);}_Ilong (dptr, length)	double *dptr;	int length;{	char temp[75];	int _Inodg();	double x;	double atof();if (_Isstr(temp, length, _Inodg) < 0)	return (-1);x = atof(temp);if (dptr == 0)	return (0);*dptr = x;return (1);}_Isstr (sptr, length, stopf)	char *sptr;	int length, (*stopf)();{	int ch, initlen, _Inxch();	extern int _Isfil, (*_Igetc)(), (*_Iungc)();initlen = length;if ((ch=_Inxch()) < 0)	return (-1);(*_Iungc)(ch,_Isfil);while (!((*stopf)(ch=(*_Igetc)(_Isfil))) && length-- > 0)	if (sptr != 0)		*(sptr++) = ch;if (ch >= 0)	(*_Iungc)(ch,_Isfil);if (length == initlen)	return (-1);if (sptr == 0)	return (0);*sptr = '\0';return (1);}_Iestr (c)char c;{if (_Ispce(c)) return (1);if (c == '\0') return (1);return (0);}

⌨️ 快捷键说明

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