📄 scan1.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 + -