Re: [問題] fgets只讀第X個字出來比較

看板C_and_CPP作者 (藍影)時間14年前 (2010/07/11 00:55), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串2/2 (看更多)
原文恕刪.. 依您之前的說明, 你自訂的數列還要再自己放在陣列裡面(或其它資料結構) 到時再抓出來做比對動作,修改後程式碼如下所示 #include <stdio.h> #include <stdlib.h> #define LEN (unsigned)(2000) #define FILENAME (char*)("test.txt") #define POS1 (unsigned)(5) #define POS2 (unsigned)(9) #define SEQU_LEN (unsigned)(10) int main(int argc, char **argv) { char buffer1[LEN]; char buffer[LEN]; unsigned i=0, j=0; unsigned a, b, target; char b1, b2; // ======================================== // 假設你的序列如下 unsigned Sequ1[SEQU_LEN] = {3,104,115}; unsigned Sequ2[SEQU_LEN] = {102,103}; // ======================================== FILE *fp = fopen(FILENAME, "rb"); FILE *fp1= fopen("1.txt", "wb"); FILE *fp2= fopen("2.txt", "wb"); while(fgets(buffer1, LEN, fp)!=NULL) { b1 = buffer1[POS1], buffer1[POS1] = ' '; b2 = buffer1[POS2], buffer1[POS2] = ' '; sscanf(buffer1, "%u%u%u%s", &a, &b, &target, buffer); buffer1[POS1] = b1, buffer1[POS2] = b2; // printf("%d\n", target); // 判斷是否屬於 Sequ1 for(i=0; i<SEQU_LEN; i++) { if(Sequ1[i]==target) { fputs(buffer1, fp1); break; } } // 判斷是否屬於 Sequ2 for(i=0; i<SEQU_LEN; i++) { if(Sequ2[i]==target) { fputs(buffer1, fp2); break; } } } fclose(fp); fclose(fp1); fclose(fp2); return 0; } 這是一種簡單實現方式, 當然往後維護的時候會遇到一些問題 1. 比對方式,速度可能不夠快 2. 數列大小可改寫為非固定(動態陣列方式) 當然這些東西必須以你實際上遇到的問題才可加以修改 另,小弟覺得您對於 C 語言之字串結構、處理還很陌生 以及檔案之處理也還不夠熟悉 請再加強進修基礎 C/C++ 部份 -- 我期待 我等待 肩狹骨上的翅膀早些長出來 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.77.78 ※ 編輯: tropical72 來自: 180.177.77.78 (07/11 00:56)

07/11 10:16, , 1F
所以我自訂的數列是放在buffer1[POS1] = ' ';單引號中嗎?
07/11 10:16, 1F

07/11 10:54, , 2F
來試看看 感謝你
07/11 10:54, 2F

07/12 01:14, , 3F
你的自訂數列不是放在那裡.
07/12 01:14, 3F
※ 編輯: tropical72 來自: 180.177.77.78 (07/12 01:35)

07/12 01:36, , 4F
程式碼已新增數列之比較部份,請加油 #end#
07/12 01:36, 4F
文章代碼(AID): #1CEANfSe (C_and_CPP)
文章代碼(AID): #1CEANfSe (C_and_CPP)