2011-11-14
//程序生成若干页的整数,每页包括NCOLS列,每列包括NROWS个元素。按列连续分布
//既按行接受,按列打印
#define BUFSIZE (NROWS * (NCOLS-1))
static int buffer[BUFSIZE];
static int *bufptr = buffer;
void print(int n)
{
if (bufptr == &buffer[BUFSIZE])
{
static int row = 0;
int *p;
for (p = buffer + row; p < bufptr; p += NROWS)
{
printnum(*p);//在本页当前位置打印一个字符
printnum(n);//打印当前行的最后一个元素
printnl();//打印一个换行符
if (++row == NROWS )
{
printpage();//打印一个分页符
//重置row和bufptr
row = 0;
bufptr = buffer;
}
}
}
else
*bufptr++ = n;
}
//功能:打印缓存区中剩余的元素
void flush()
{
int k = bufptr - buffer;//计算缓存区中剩余项的数目
if (k > NROWS) k = NROWS;
for (int row = 0;row < k; row++)
{
int *p;
for (p = bufptr + row; p < bufptr; p += NROWS)
{
printnum(*p);
}
printnl();
}
printpage();
}