トップ 一覧 Farm 検索 ヘルプ RSS ログイン

2001db1.cの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
 
 #define MAXLINE  100
 #define MAXWIDTH 50
 
 int plen,cnum,width,cspace;
 char table[MAXLINE][MAXWIDTH];
 
 void cleartable(void);
 void writetable(void);
 void copytable(int line, int column, char buf[MAXWIDTH]);
 void strcpy2(int start, int haba, char buf[MAXWIDTH], char buf2[MAXWIDTH]);
 
 int main(void)
 {
 	char buf[MAXWIDTH];
 	char buf2[MAXWIDTH];
 	int i;
 	int line, column, len;
 	
 	while(1){
 		gets(buf);
 		plen=atoi(buf);
 		if(plen==0)
 			break;
 			
 		gets(buf);
 		cnum=atoi(buf);
 		gets(buf);
 		width=atoi(buf);
 		gets(buf);
 		cspace=atoi(buf);
 		
 //		printf("%d %d %d %d\n", plen,cnum,width,cspace);
 		
 		cleartable();
 		
 		line=0;
 		column=0;
 		
 		while(1){
 			gets(buf);
 			len=strlen(buf);
 //			printf("%8s len=%d ",buf, len);
 			
 			if(buf[0]=='?'){
 //				printf("%c\n", buf[0]);
 //				writetable();
 				break;
 			}
 			
 			if(len<=width){
 //				printf("len<=width ");
 				copytable(line,column,buf); 	// tableにbufを書き込む
 				line++;
 				if(line>plen){
 					line=0;
 					column++;
 					if(column==cnum){
 //						writetable();		// table全部出力
 						cleartable();
 						line=0;
 						column=0;
 					}
 				}
 			}else{
 //				printf("len>width ");
 				for(i=0; i<len/width; i++){
 					strcpy2(i*width,width,buf,buf2); 	// i文字目からwidth文字分buf2にコピー
 					copytable(line,column,buf2); 		// tableにbuf2を書き込む
 					line++;
 					if(line>plen){
 						if(column==0){
 							column=1;
 							line=0;
 						}else{
 //							writetable();		// table全部出力
 							cleartable();
 							line=0;
 							column=0;
 						}
 					}
 				}
 				if(len%width>0){ // コピーの残ったものがあったら
 //					puts("amari");
 					strcpy(buf2,"..................................................");
 					strcpy2((len/width)*width,len%width,buf,buf2); // i文字目からwidth文字分buf2にコピー
 					copytable(line,column,buf2); // tableにbuf2を書き込む
 					line++;
 					if(line>plen){
 						if(column==0){
 							column=1;
 							line=0;
 						}else{
 //							writetable();	// table全部出力
 							cleartable();
 							line=0;
 							column=0;
 						}
 					}
 				}
 			}
 			
 //			printf("line=%d column=%d\n", line, column);
 			writetable();
 			
 		}
 //		writetable();
 	}
 	return 0;
 }
 
 void cleartable(void)
 {
 	int x,y;
 	
 	for(y=0; y<MAXLINE; y++){
 		for(x=0; x<MAXWIDTH; x++){
 			table[x][y]='.';
 		}
 	}
 }
 
 void writetable(void)
 {
 	int x,y;
 	
 	for(y=0; y<plen; y++){
 		for(x=0; x<width*2+cspace; x++){
 			printf("%c",table[x][y]);
 		}
 		printf("\n");
 	}
 	printf("#\n");
 }
 
 void copytable(int line, int column, char buf[MAXWIDTH])
 {
 	int i;
 	int len=strlen(buf);
 	
 	for(i=0; i<len; i++){
 		table[column*width+column*cspace+i][line]=buf[i];
 	}
 }
 
 void strcpy2(int start, int haba, char buf[MAXWIDTH], char buf2[MAXWIDTH])
 {
 	int x;
 	
 	for(x=0; x<haba; x++){
 		buf2[x]=buf[start+x];
 	}
 }