#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

main ()
{
    FILE *fp; //指標 變數名
    int i,j,newline;   
    struct Line{int Lnumx,Lnumy,stx,sty,enx,eny;//線段名稱 <x,y>
                char attribute;//存明筆或暗筆 V H
                };
    //第X劃的第Y線段 設一個Line結構 來存兩個點的值
    struct Word{
           char s[5];//存注音符號 
           int count;//存最多可以幾條線
           struct Line Lines[10];//用法:結構名+變數名[個數]
           }; //設Char的結構來存注音符號、線的數量以及引進Line的格式(兩個點)
           //來構成Char
    struct Word All[37];//宣告37個
       
    fp=fopen("D:/94413016/20070329/a.txt","r");//開檔
           if(fp==NULL){//檢查開檔有沒有成功
                        printf("open file error\n");
                       }
/*讀檔*/   
    for (i=0;i<37;i++) //因為已知txt檔的內容所以才可以這樣寫
    {
     fscanf(fp,"%s %d",All[i].s,&All[i].count);//將 count 讀入(位置)
     for(j=0;j<All[i].count;j++)
        {      
           fscanf(fp,"%d%d%d%d",&All[i].Lines[j].stx,&All[i].Lines[j].sty,
           &All[i].Lines[j].enx,&All[i].Lines[j].eny);//印出線的兩個點
           All[i].Lines[j].attribute='V';//直接判斷所有輸入的線段為明筆             
        }
     }   
   
    fclose(fp);
/*判斷*/
   
    for(i=0;i<37;i++)
    {
      All[i].Lines[0].Lnumx=1;//預設第一劃等於1
      All[i].Lines[0].Lnumy=1;//預設第一線段等於1
      for(j=1;j<All[i].count;j++)
      {//後測的話J不能等於零(不能為第一劃)
        if ((j!=0)
        &&(All[i].Lines[j].stx==All[i].Lines[j-1].enx)
        &&(All[i].Lines[j].sty==All[i].Lines[j-1].eny))
        {
         All[i].Lines[j].Lnumx=All[i].Lines[j-1].Lnumx;
         All[i].Lines[j].Lnumy=All[i].Lines[j-1].Lnumy+1;//第X筆劃的的第Y+1線段                                                                                                     
         }else{
              All[i].Lines[j].Lnumx=All[i].Lines[j-1].Lnumx+1;
              All[i].Lines[j].Lnumy=1;//第X+1筆劃的第1條線段
             }
      }
     }
     for(i=0;i<37;i++)//判斷明筆暗筆‧列出暗筆
     {
          for(j=1;j<All[i].count;j++)
          {
            if (All[i].Lines[j].Lnumx=All[i].Lines[j-1].Lnumx+1)//如果是新筆劃就插入暗筆
               {
                for (newline=All[i].count-1;newline>=j;newline--)//newline從後面判斷回前面
                {//將J的東西搬進J+1裡面
                 All[i].Lines[j+1].stx=All[i].Lines[j].stx;
                 All[i].Lines[j+1].sty=All[i].Lines[j].sty;
                 All[i].Lines[j+1].enx=All[i].Lines[j].enx;
                 All[i].Lines[j+1].eny=All[i].Lines[j].eny;
                 All[i].Lines[j+1].Lnumx=All[i].Lines[j].Lnumx;
                }
                All[i].count++;
               }
            else
               {
                All[i].Lines[j].attribute='H';
                All[i].Lines[j].Lnumx=All[i].Lines[j-1].Lnumx+1;
                All[i].Lines[j].Lnumy=1;
               }
          }           
     }
/*印出*/
    for(i=0;i<37;i++)
    {
     printf("符號:%s\t 線數:%d \n",All[i].s,All[i].count);//印注音符號跟線段數
         for(j=0;j<All[i].count;j++)
         {
          printf("(%d,%d)│%c│(%d,%d)\t(%d,%d)\n",
          All[i].Lines[j].Lnumx,
          All[i].Lines[j].Lnumy,
          All[i].Lines[j].attribute,
          All[i].Lines[j].stx,
          All[i].Lines[j].sty,
          All[i].Lines[j].enx,
          All[i].Lines[j].eny);
         }
      printf("-------------------------------\n");
    }
    system("pause");
 }


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Joy 的頭像
    Joy

    正Man's World

    Joy 發表在 痞客邦 留言(0) 人氣()