全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:710
推到 Plurk!
推到 Facebook!

請教關於開讀檔dump程式的問題

尚未結案
pc061619
一般會員


發表:1
回覆:2
積分:0
註冊:2005-01-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-30 16:39:31 IP:211.76.xxx.xxx 未訂閱
要如何寫讓這個dump程式的功能5可以搜尋我在鍵盤上輸入它開始位置和結束位置,顯示於螢幕上及執行檔在螢幕上可以輸入這些選項出來,謝謝~~
 
#include
#include
#define BUFSIZE 64
 char      buf[BUFSIZE];
 main(int argc,char *argv[])
 {
         char fname[80];
         char ch;
         FILE *fp;
         long pos=0;
         int  z=4,i=0,s=16,x=0,end=0;
         int  Num,loc,count,go;
         if(argc<2)
         {
           printf("Usage:ex11-7-1 File1 File2 File3...\n");
           exit(1);
         }
     printf("Please Input One Number   ");
     scanf("%d",&Num);
     if(Num==3||Num==4||Num==5)
      {
        printf("you go to address  ");      
        scanf("%X",&i);
        i=("%d",i);
        s=s i;
        pos=i 1;
       }
     switch(Num)
         {
          case 1 : printf("ALL\n");
                   go=0;break;            
          case 2 : printf("Page\n");                 
                   go=1;break;
          case 3 : go=0;break;
          case 4 : go=1;break;
          case 5 : 
                   printf("you end to address  ");
                   scanf("%X",&end);
                   end=("%d",end);
                                   
                   break; 
          default :printf(" Number is error.... !!\n");
                   exit(1);break;
         }        
         printf("00X  ",i);
         for(i=1; i0)
                {
                  dumpploc(buf,count,s); 
                  z=s (3*16);
                  if(x<3)   
                  {
                   if((count>0)&&!feof(fp))
                   printf("00X  ",z);
                  }
                   z=z (4*16);
                   x =1;
                   s=s (4*16);
                }
             }
                   x=x-4;
             if(go==1)
             {
printf("\n Please press any key to page down or press 'o' break \n"); 
             if ((ch=getch ())=='o')                              
                exit(1);
             }
                 s=s-16;
                 if((count>0)&&!feof(fp))
                 {                
                   printf("00X  ",s);
                   s=s 16;
                 }
           }
                 while((count>0)&&!feof(fp));
         }
 }
 dumpploc(char *start,int len,int ss)
 {
         char locbuf[17];
         int  i,j;
         int  time=0;
         char *pnt;
         pnt=start;  
         for(i=0,j=0; i126)
                           locbuf[j]='.';     
                    if(j==15)
                        {
                           locbuf[16]=0;
                           printf(" s\n",locbuf);
                           j-=16;
                       if(time<3)                    
                           {
                    printf("00X  ",ss);
                            ss=ss 16;
                            time =1;                       
                           }                     
                        }
         }
         if(j>0)
         {
                 for(i=0; i<(16-j); i  )
                         printf("   ");
                 locbuf[j]=0;
                 printf(" %*s\n",j,locbuf);
         }
 }
pc061619
一般會員


發表:1
回覆:2
積分:0
註冊:2005-01-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-30 17:04:41 IP:211.76.xxx.xxx 未訂閱
抱歉各位大大,我第一次發表文章不太會用,程式碼我有加上縮排的標記,可是為何程式好像沒有縮排,看起來怪怪的,這個程式我要新增的是第5個功能,我的想法是用我程式當中功能3、4的fseek搜尋檔案位置來指定我要顯示的位置的那一頁,因為功能3、4會一直印到開的檔的位置到結束,或者是只要某一頁的其中一行,拜託有哪位高手能幫我解決,謝謝~
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-30 22:06:12 IP:221.169.xxx.xxx 未訂閱
加個count記錄現在顯示了幾行即可
         for(i=1; iint line_printed=0;
           if((fp=fopen(argv[i],"rb"))==NULL)
           printf("File %s open faliure!\n",argv[i]);
           else do
           {
if (  line_printed > 40) break; //假設一頁40行
             fseek(fp,pos,0);
             pos=pos (64*4);
             for(loc=0; loc<4; loc  )                 
建議以後程式碼後面加個註解,不然要看懂真的有些辛苦.. 另外
        printf("you go to address  ");      
        scanf("%X",&i);
        i=("%d",i); <== 這行在幹嘛的?
pc061619
一般會員


發表:1
回覆:2
積分:0
註冊:2005-01-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-31 20:10:35 IP:211.76.xxx.xxx 未訂閱
justdo您好: 非常抱歉,因為我這個程式是從書上範例在加的,而他那本書註解也沒寫的很清楚,我只大概補充了一些我知道的註解進來,希望你看的懂,我原來寫的意思不是很清楚可能讓你誤解了例如case3、4是如果我打100,他會搜尋到第100行然後以全頁或分頁印完所開的檔,那如果說我要新增case5可以讓我打開始位置100end200,他會搜尋第100行然後印到200行就停止結束程式而不像3、4一樣印到完,是要寫一個判斷讓程式知道我只要印到某一行就中止結束嗎,如果是請教我如何寫,謝謝~
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-02-02 18:49:59 IP:221.169.xxx.xxx 未訂閱
當按下5的時候,令go等於2 然後修改檢查go值的地方 當go==2時,執行continue這個指令
系統時間:2024-05-19 17:46:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!