⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scan1.c

📁 Version 6 Unix 核心源代码 Version 6 Unix 核心源代码
💻 C
字号:
scanf (p1, p2, p3, p4)	int p1, p2, p3, p4;{/* first arg can be a control string, a file id, or -1 */	int ptrs[10], j, ip, flp, k;	char *np;/*	extern int cin;*/extern (*_Igetc)(), (*_Iungc)(), cgetc(), ungetc(), _Igstr(), _Iungs();extern char *_Iinpt;ip = 0;if (p1 == -1)  {k = 1; _Iinpt = p2;}else if (p1 >= 0 && p1 < 10)  k = 0;else  k = -1;if (k <= 0)  {_Igetc = cgetc; _Iungc = ungetc;}else  {_Igetc = _Igstr; _Iungc = _Iungs;}j = 0;for (np = (&p2)[k]; *np; np++)    if (*np == '%' && *(np+1) != '%' && *(np+1) != '*')	ptrs[ip++] = (&p3)[(j++)+k];return (_Iscan ((k==0 ?  p1 : 0), (&p2)[k], ptrs));}_Iscan (fileid, format, listp)	char *format;	int *listp;{	char ch, _Inxch();	int nmatch;	extern int _Isfil;	_Isfil = fileid;nmatch = 0;while (1) switch (ch= *format++)	{	case '\0': return (nmatch);	case '%': switch (_Isfrm(&format, *listp++))			{			case 0: listp--; break;			case -1: return (nmatch > 0 ? nmatch : -1);			default: nmatch++;			}	case ' ':	case '\n':	case '\t': break;	default: if (ch != _Inxch())			return(nmatch);	}}int _Isfil 0;_Ichar (cptr)	char *cptr;{	char ch, _Inxch();if ((ch = _Inxch()) < 0)	return (-1);if (cptr == 0)	return (0);*cptr = ch;return (1);}_Iflot (fptr, length)	float *fptr;	int length;{	char temp[75];	int _Inodg();	float x;	double atof();if (_Isstr(temp, length, _Inodg) < 0)	return (-1);x = atof(temp);if (fptr == 0)	return (0);*fptr = x;return (1);}_Inodg (ch)char ch;{if (_Idigt(ch,10) >= 0) return (0);switch (ch)	{	case 'E':	case 'e':	case '.': case '+': case '-':		return (0);	}return (1);}_Isfrm (spec, pointer)	char **spec;	int pointer;{	int length, lflag, _Iestr(), _Ispnd();	char ch;length = lflag = 0;while (1) switch (ch = *((*spec)++))	{	case '*': pointer=0; break;	case '0': case '1': case '2': case '3': case '4':	case '5': case '6': case '7': case '8': case '9':		length = length*10 + ch - '0' ;		lflag++;		break;	case 'o': /* octal */		return(_Iint(pointer, lflag ? length : 100, 8));	case 'x': /* hex */		return(_Iint(pointer, lflag ? length : 100, 16));	case 'd': /* decimal */		return (_Iint(pointer, lflag ? length : 100, 10));	case 'c': /* character */		return (_Ichar(pointer));	case 's': /* string */		return (_Isstr(pointer, lflag ? length : 100, _Iestr));	case 'f':	case 'e': /* float */		return (_Iflot(pointer, lflag ? length : 100));	case 'l': /*  (long) double or int */		switch(*(*spec)++)			{			case 'f': case 'F':			case 'e': case 'E':				return (_Ilong (pointer, lflag ? length : 100));			default: printf(2, "long not yet implemented\n");				return(0);			}	case '[': /* special strings */		_Imtab(spec);		return (_Isstr (pointer, lflag ? length : 100, _Ispnd));	case '%':		if (_Inxch() != '%')			return (-1);		return(0);	case '\0':		_Ierr("scanf: bad format termination\n");	default: _Ierr ("scanf: format character %c", ch);	}}

⌨️ 快捷键说明

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