Re: [問題] fgets只讀第X個字出來比較
原文恕刪..
依您之前的說明,
你自訂的數列還要再自己放在陣列裡面(或其它資料結構)
到時再抓出來做比對動作,修改後程式碼如下所示
#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
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
07/12 01:36, 4F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):