标签:os io ar for amp c line new ef
k&r 习题,把较长的输入行折成短行,将习题答案搬来:#include<stdio.h> #define MAXCOL 20 #define TABINC 8 char line[MAXCOL]; void printl(int pos); int exptab(int pos); int findblnk(int pos); int newpos(int pos); main() { int c,pos; pos=0; while((c=getchar()) != EOF){ line[pos]=c; if (c==‘\t‘) pos=exptab(pos); else if(c==‘\n‘){ printl(pos); pos=0; }else if (++pos >= MAXCOL){ pos=findblnk(pos); printl(pos); pos=newpos(pos); } } } void printl(int pos) { int i; for(i=0;i<pos;++i) putchar(line[i]); if(pos>0) putchar(‘\n‘); } int exptab(int pos) { line[pos]=‘ ‘; for(++pos;pos<MAXCOL && pos%TABINC != 0;++pos) line[pos]=‘ ‘; if(pos<MAXCOL) return pos; else{ printl(pos); return 0; } } int findblnk(int p) { while(p>0 && line[p]!=‘ ‘){ --p; } if(p==0) return MAXCOL; else{ return p+1; } } int newpos(int pos) { int i,j; if(pos<=0 || pos>=MAXCOL) return 0; else{ i=0; for(j=pos;j<MAXCOL;++j){ line[i]=line[j]; ++i; } return i; } }
标签:os io ar for amp c line new ef
原文地址:http://my.oschina.net/sukai/blog/311208