[問題] 花了很久的時間

看板C_and_CPP作者 (白飯)時間15年前 (2010/03/14 02:37), 編輯推噓4(4015)
留言19則, 5人參與, 最新討論串1/3 (看更多)
如題簡單來說就是作業= = 前前後後我大概花了4.5天吧= = 每天超過3個小時去寫還是寫不出來啊T.T 沒辦法我是程設新手= = 題目大概描敘是這樣的用程式來判斷幾A幾B 沒錯就是猜數字遊戲 但是...但是還不需要讓程式想辦法將目標數猜出來 利用檔案輸入檔的資料來判斷將判對結果存入輸出檔 而輸入檔第一行數字(就是4個)是目標數之後後面幾行是要猜數字 輸出檔內容就不用說了?A?B 範例 input.txt → output.txt 8651       0A1B 1234 1A2B 5678 1A1B 1357 0A2B 2468 基本上直接用程式判斷幾A幾B不是問題 加上google有很多範例 但是變成目標數要輸入檔第一行數字就很棘手了Orz 可能我太廢吧 先拋開判斷幾A幾B來講 我一直卡在輸入字串判斷fget讀行方面 #include <stdio.h> #include <stdlib.h> int main () { int i; char line[i][1024]; FILE *inp; FILE *outp; inp = fopen ("input.txt", "r"); outp = fopen ("output.txt", "w"); for(i=0;i>0;i++); if(inp != NULL) { while (fgets(line[i],1024,inp)!= NULL) { fputs (line[0], outp); puts("\n"); } } fclose (inp); fclose (outp); return 0; } 以上程式碼我想要把輸入檔第一行數字印到輸出檔 但是怎麼印都失敗= = 用strtok分割也不行 字串被破壞了啊= = 印出來都是NULL= = 且我只是想印第一行的 想辦法把第一行獨立= = #include <stdio.h> #include <stdlib.h> #include<string.h> int main () { char buf[256],*s; char *delims =" \t\n"; FILE *inp; inp = fopen ("input.txt", "r"); FILE *outp; outp = fopen("output.txt", "w"); while(1) { if( fgets(buf, 256, inp) == NULL ) break; s = strtok(buf, delims); while( s != NULL ) { s = strtok(NULL, delims); printf("%s\n",s); fputs (buf, outp); } } fclose(inp); fclose(outp); system("pause"); return 0; } 請益大大們了Orz 真的卡好久欸 如果可以的話可以直接把題目需求解出來 然後解釋為什麼這樣做、這樣做的目的(可以加//註解) 還有也可以的話修正以上為什麼我一直失敗= = 我想不通欸 所以拜託大大們囉 感恩不盡 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.202.58

03/14 02:43, , 1F
目標數要輸入檔第一行數字 <=這句話怎麼解釋啊?
03/14 02:43, 1F

03/14 02:43, , 2F
讀進第一行時 弄個變數把第一行存起來 for 則從1開始
03/14 02:43, 2F

03/14 02:46, , 3F
看懂了...
03/14 02:46, 3F

03/14 10:02, , 4F
標題可以寫清楚一點嗎 板規有規定的
03/14 10:02, 4F

03/14 13:32, , 5F
如果不會有奇怪的輸入, 這個case用fscanf直接讀%s或者
03/14 13:32, 5F

03/14 13:33, , 6F
喜歡的話讀%d也可以啊....@_@"
03/14 13:33, 6F

03/14 13:34, , 7F
再說根本不用開1024個array, 讀完一個寫一個就好了.
03/14 13:34, 7F

03/14 13:34, , 8F
最後, int i; char line[i][1024]; 這樣的宣告錯很大~_~
03/14 13:34, 8F

03/14 20:59, , 9F
以上 沒辦法啊我要把每行分別各自獨立存在陣列裡面
03/14 20:59, 9F

03/14 21:00, , 10F
我的想法是這樣 i就是指 可能會有很多行的樣子
03/14 21:00, 10F

03/14 21:19, , 11F
寫程式每一行都要明確, 你知道上面那樣宣告會有什麼結果
03/14 21:19, 11F

03/14 21:20, , 12F
嗎?? 就算你的環境支持VLA好了, 你的宣告一樣違反置底十
03/14 21:20, 12F

03/14 21:21, , 13F
誡之一; 最後, 你確定你需要把所有資料開一個這麼大的
03/14 21:21, 13F

03/14 21:22, , 14F
array存資料, 而不是一個固定明確的小array, 處理完一筆
03/14 21:22, 14F

03/14 21:22, , 15F
下一迴圈直接reuse就好??
03/14 21:22, 15F

03/14 21:23, , 16F
剛才注意到 for(i=0;i>0;i++); 這一行. for後面直接給個
03/14 21:23, 16F

03/14 21:24, , 17F
分號, 那這個for就什麼事都沒做直接一直跑; 又無論你這
03/14 21:24, 17F

03/14 21:24, , 18F
個迴圈是不是要搭後面的if一起, 這個迴圈根本不會執行,
03/14 21:24, 18F

03/14 21:25, , 19F
因為i=0, 所以還沒跑在i>0就被中止了....@_@"
03/14 21:25, 19F
文章代碼(AID): #1BczjbTI (C_and_CPP)
文章代碼(AID): #1BczjbTI (C_and_CPP)