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

📄 in.c

📁 CFront1.0的源代码,第一代C++编译器的思想...
💻 C
字号:
/* @(#) in.c 1.3 1/27/86 17:48:02 *//*ident	"@(#)cfront:lib/stream/in.c	1.3"*//*	C++ stream i/o source	in.c*/#include <ctype.h>#include "stream.h"#include <common.h>filebuf cin_file(0);			// UNIX input stream 1istream cin(&cin_file,1,&cout);		// cin tied to cout/* predefined whitespace */whitespace WS;/*inline */void eatwhite (istream& is){	if (is.tied_to) is.tied_to->flush();	register streambuf *nbp = is.bp;	register int c = nbp->sgetc();	while (isspace(c)) c = nbp->snextc();	if ( c == EOF )		is.state |= _eof;}istream& istream.operator>>(whitespace&){	register streambuf *nbp = bp;	if (state) return *this;	if (tied_to) tied_to->flush();	register c = nbp->sgetc();	while (isspace(c)) c = nbp->snextc();	if (c == EOF) state |= _eof;	return *this;}istream& istream.operator>>(register char& s)/*	reads characters NOT very small integers */{	if (skipws) eatwhite(*this);	if (state) {		state |= _fail;		return *this;	}	register c = bp->sgetc();	if (c == EOF) {		state |= _fail|_eof;		return *this;	}	if (bp->snextc() == EOF) state |= _eof;	s = c;	return *this;}istream& istream.operator>>(register char* s){	register streambuf *nbp = bp;	if (skipws) eatwhite(*this);	if (state) {		state |= _fail;		return *this;	}	/* get string */	register c = nbp->sgetc();	if (c == EOF) state |= _fail;	while (!isspace(c) && c != EOF) {		*s++ = c;		c = nbp->snextc();	}	*s = '\0';	if (c == EOF) state |= _eof;	return *this;}istream&istream.operator>>(long& i){	register c;	register ii = 0;	register streambuf *nbp = bp;	int neg = 0;	if (skipws) eatwhite(*this);	if (state) {		state |= _fail;		return *this;	}	switch (c = nbp->sgetc()) {	case '-':	case '+':		neg = c;		c = nbp->snextc();		break;	case EOF:		state |= _fail;	}	if (isdigit(c)) {		do {			ii = ii*10+c-'0';		} while (isdigit(c=nbp->snextc()));		i = (neg=='-') ? -ii : ii;	} else		state |= _fail;	if (c == EOF) state |= _eof;	return *this;}istream&istream.operator>>(int& i){	long l;	if (skipws) eatwhite(*this);	if (state) {		state |= _fail;		return *this;	}	if ( *this>>l ) {		i = l;	}	return *this;}istream&istream.operator>>(short& i){	long l;	if (skipws) eatwhite(*this);	if (state) {		state |= _fail;		return *this;	}	if ( *this>>l ) {		i = l;	}	return *this;}istream&istream.operator>>(double& d)/*	{+|-} d* {.} d* { e|E {+|-} d+ } 	except that		- a dot must be pre- or succeded by at least one digit		- an exponent must be preseded by at least one digit*/{	register c = 0;	char buf[256];	register char* p = buf;	register streambuf* nbp = bp;	extern double atof(char*);	if (skipws) eatwhite(*this);	if (state) {		state |= _fail;		return *this;	}	/* get the sign */	switch (c = nbp->sgetc()) {	case EOF:		state = _eof|_fail;		return *this;	case '-':	case '+':		*p++ = c;		c = bp->snextc();	}	/* get integral part */	while (isdigit(c)) {		*p++ = c;		c = bp->snextc();	}	/* get fraction */	if (c == '.') {		do {			*p++ = c;			c = bp->snextc();		} while (isdigit(c));	}	/* get exponent */	if (c == 'e' || c == 'E') {		*p++ = c;		switch (c = nbp->snextc()) {		case EOF:			state = _eof|_fail;			return *this;		case '-':		case '+':			*p++ = c;			c = bp->snextc();		}		while (isdigit(c)) {			*p++ = c;			c = bp->snextc();		}	}	*p = 0;	d = atof(buf);	if (c == EOF) state |= _eof;	return *this;}istream&istream.operator>>(float& f){	double d;	if (skipws) eatwhite(*this);	if (state) {		state |= _fail;		return *this;	}	if ( *this>>d ) {		f = d;	}	return *this;}istream&istream.get(	register char* s,	/* character array to read into */	register int len,	/* size of character array */	register char term	/* character that terminates input */) {	register c;	register streambuf *nbp = bp;	if (state) {		state |= _fail;		return *this;	}	if ((c = bp->sgetc()) == EOF) {		state |= _fail | _eof;		return *this;	}	while (c != term && c != EOF && len > 1) {		*s++ = c;		c = nbp->snextc();		len--;	}	*s = '\0';	if (c == EOF) state |= _eof;	return *this;}istream& istream.putback(register char c){	bp->sputbackc(c);	return *this;}istream& istream.get(	register streambuf &s,	/* streambuf to input to */	register char term	/* termination character */){	register c;	register streambuf *nbp = bp;	if (state) {		state |= _fail;		return *this;	}	if ((c = bp->sgetc()) == EOF) {		state |= _fail | _eof;		return *this;	}	while (c != term && c != EOF) {		if (s.sputc(c) == EOF) break;		c = nbp->snextc();	}	if (c == EOF) state |= _eof;	return *this;}istream&istream.operator>>(register streambuf &s) {	register c;	register streambuf *nbp = bp;	if (state) {		state |= _fail;		return *this;	}	if ((c = bp->sgetc()) == EOF) {		state |= _fail | _eof;		return *this;	}	while (c != EOF) {		if (s.sputc(c) == EOF) break;		c = nbp->snextc();	}	if (c == EOF) state |= _eof;	return *this;}istream& istream.operator>>(common& p){	return p.read(*this);}

⌨️ 快捷键说明

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