C_and_CPP 板


LINE

目前是用 fscanf 和動態來寫,讀一個寫一個這樣 不過這樣變成每讀一次都要 realloc 一次感覺不太好 請問有甚麼可以讓 fscanf 的指標往回的方式嗎? 還是每讀一次就 realloc 一次就好了呢? realloc 如果原本位置不夠會給一個新的地址 把東西複製過去並且 free 掉原本的空間對吧 可是 realloc 完之後前面兩個數據都會跑掉不知道為什麼 http://i.imgur.com/7GVK0lz.jpg 抱歉問題頗多,麻煩各位了 typedef struct { int start_i, start_j; // 起點座標 int end_i, end_j; // 終點座標 int direction; // 邊的指向 int internal; // 內部方向 }coordinate; int main(int argc, char *argv[]) { FILE *fp; char str[30] = "f1.txt"; fp = fopen(str, "r"); if (NULL == fp) { printf("開檔失敗\n"); } int i = 0; int j = 0; int coordinate_i, coordinate_j; char str2[60]; coordinate *qwe = (coordinate*)malloc(10 * sizeof(coordinate)); coordinate *qwer; while (strcmp("POLYGON", str2) != 0) { fscanf(fp, "%s", &str2); printf("%s\n", str2); } i = 4; fscanf(fp, "%d %d %d %d", &(*qwe).start_i, &(*qwe).start_j, &(*qwe).end_i, &(*qwe).end_j); // 輸入邊 1. 的起點和終點座標 (*(qwe + 1)).start_i = (*qwe).end_i; (*(qwe + 1)).start_j = (*qwe).end_j; printf("邊1. (%d,%d)到(%d,%d)\n", (*qwe).start_i, (*qwe).start_j, (*qwe).end_i, (*qwe).end_j); fscanf(fp, "%d %d", &(*(qwe + 1)).end_i, &(*(qwe + 1)).end_j); (*(qwe + 2)).start_i = (*(qwe + 1)).end_i; (*(qwe + 2)).start_j = (*(qwe + 1)).end_j; printf("邊2. (%d,%d)到(%d,%d)\n", (*(qwe + 1)).start_i, (*(qwe + 1)).start_j, (*(qwe + 1)).end_i, (*(qwe + 1)).end_j); fscanf(fp, "%d %d", &(*(qwe + 2)).end_i, &(*(qwe + 2)).end_j); (*(qwe + 3)).start_i = (*(qwe + 2)).end_i; (*(qwe + 3)).start_j = (*(qwe + 2)).end_j; printf("邊3. (%d,%d)到(%d,%d)\n", (*(qwe + 2)).start_i, (*(qwe + 2)).start_j, (*(qwe + 2)).end_i, (*(qwe + 2)).end_j); fscanf(fp, "%d %d", &(*(qwe + 3)).end_i, &(*(qwe + 3)).end_j); printf("邊4. (%d,%d)到(%d,%d)\n", (*(qwe + 3)).start_i, (*(qwe + 3)).start_j, (*(qwe + 3)).end_i, (*(qwe + 3)).end_j); qwer = qwe; while ((*qwe).start_i != (*(qwe + i - 1)).end_i || (*qwe).start_j != (*(qwe + i - 1)).end_j) { i += 1; for (j = 0; j < i; j++) { printf("邊%d. (%d,%d)到(%d,%d)\n", j + 1, (*(qwe + j)).start_i, (*(qwe + j)).start_j, (*(qwe + j)).end_i, (*(qwe + j)).end_j); } printf("\n"); qwe = (coordinate *)realloc(qwe, i); // 這絕對不是好方法(每個新座標都realloc一次),之後再一起改掉(提醒一下) for (j = 0; j < i; j++) { printf("邊%d. (%d,%d)到(%d,%d)\n", j + 1, (*(qwe + j)).start_i, (*(qwe + j)).start_j, (*(qwe + j)).end_i, (*(qwe + j)).end_j); } printf("\n"); fscanf(fp, "%d %d", &(*(qwe + i - 1)).end_i, &(*(qwe + i - 1)).end_j); (*(qwe + i - 1)).start_i = (*(qwe + i - 2)).end_i; (*(qwe + i - 1)).start_j = (*(qwe + i - 2)).end_j; printf("邊%d. (%d,%d)到(%d,%d)\n\n", i , (*(qwe + i - 1)).start_i, (*(qwe + i - 1)).start_j, (*(qwe + i - 1)).end_i, (*(qwe + i - 1)).end_j); } system("pause"); return 0; } ----- Sent from JPTT on my Google Pixel 2. --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.15.166.13
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1554707915.A.B6C.html
1F:→ james732: 你要不要把程式碼貼上來?04/08 17:53
※ 編輯: ohmylove347 (118.168.27.209), 04/08/2019 19:43:19
2F:→ firejox: 置底有貼碼的網站 04/08 19:44
※ 編輯: ohmylove347 (118.168.27.209), 04/08/2019 19:49:11
3F:→ ohmylove347: 嗯嗯看到了感謝,我還在學怎麼弄 04/08 19:54
4F:推 idiont: 滿的時候reallocate成原來兩倍的大小 平均下來每次都是常 04/09 04:00
5F:→ idiont: 數時間 可以參考C++ vector的做法 04/09 04:00
6F:→ idiont: fscanf的指標指的是FILE*嗎 fseek可以移動指到檔案中的位 04/09 04:04
7F:→ idiont: 置 但是你要知道要位移多少bytes 04/09 04:04
8F:→ yvb: malloc() 的參數有乘上 sizeof(), realloc() 的不用嗎? 04/09 13:14
9F:→ idiont: 要 04/09 14:35







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP