Re: [問題] fopen

看板C_and_CPP作者 (士官長)時間13年前 (2011/07/28 14:46), 編輯推噓3(3027)
留言30則, 7人參與, 最新討論串2/2 (看更多)
※ 引述《kusokiller (士官長)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : Dev C++ : 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) : 問題(Question): : 課本上的每個有fopen的題目我跑出來都有問題 : 所以現在自己從頭開始試fopen的功能還是不行 囧 : 想請版上的大大幫我看下 : 餵入的資料(Input): : 預期的正確結果(Expected Output): : 錯誤結果(Wrong Output): : 程式碼(Code):(請善用置底文網頁, 記得排版) : #include<stdlib.h> : #include<stdio.h> : int main(){ : char c; : FILE *ofp; : ofp=fopen("chapter1","r"); : while((c=getc(ofp))!=EOF){printf("%c",c);} : system("pause"); : return 0; : } : 補充說明(Supplement): 先謝謝前面幾位大大的幫助 現在我會直接fopen("檔案名稱") 和gets(a)等程式執行後輸入檔案名稱這兩種做法了 接下來想請問課本裡面所說的從commend line輸入的方法 檔案名稱:file3 #include<stdlib.h> #include<stdio.h> int main(char *argv[]){ char c; FILE *ifp; ifp=fopen(argv[1],"r"); while((c=getc(ifp))!=EOF){ printf("%c",c);} fclose(ifp); system("pause"); return 0; } 我的作法是 進去CMD 輸入file3 chapter1 或file3 chapter1.txt 不論是從CMD開始或是從DEV C++直接編譯執行都是程式出現錯誤請關閉 我覺得問題應該是ifp=fopen(argv[1],"r");這行可是我不知道如何修改 麻煩各位大大解惑 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.137.191.166

07/28 14:51, , 1F
int main(int argc, char *argv[]) <- main應該是這樣吧
07/28 14:51, 1F

07/28 14:52, , 2F
原本是這樣可是我想說我沒有用到argc就先拿掉了
07/28 14:52, 2F

07/28 14:52, , 3F
那你先改回來試試看能不能正常運作
07/28 14:52, 3F

07/28 14:53, , 4F
想說一次試一個功能 我把他加回去試看看
07/28 14:53, 4F

07/28 14:55, , 5F
加回去就成功了 感謝 可是還是不太懂為什麼 @@
07/28 14:55, 5F

07/28 14:55, , 6F
因為那叫參數列 底層呼叫時一定會放兩個參數上去
07/28 14:55, 6F

07/28 14:56, , 7F
所以你只寫一個就必然會出包
07/28 14:56, 7F

07/28 14:57, , 8F
就像 fopen 你一定是傳兩個參數進去
07/28 14:57, 8F

07/28 14:57, , 9F
那 fopen 的實作就不該偷懶說有參數用不到就不接
07/28 14:57, 9F

07/28 15:02, , 10F
因為原始題目是一個有ifp也有ofp也有用argc檢查指令數
07/28 15:02, 10F

07/28 15:02, , 11F
量對不對的程式 我不知道哪裡出錯才想說分開試看看
07/28 15:02, 11F

07/28 15:03, , 12F
所以這不是個好的學習法嗎? 謝謝j大和L大
07/28 15:03, 12F

07/28 15:03, , 13F
總之只有int main()與int main(int argc, char *argv[])
07/28 15:03, 13F

07/28 15:03, , 14F
囧, 不要試一個功能就開一篇新文阿
07/28 15:03, 14F

07/28 15:04, , 15F
這兩種寫法,請不要弄出第三種組合
07/28 15:04, 15F

07/28 15:04, , 16F
這樣整本練完不就...
07/28 15:04, 16F

07/28 15:04, , 17F
(那個加上環境變數版本的就暫且不討論...XD)
07/28 15:04, 17F

07/28 15:19, , 18F
超哥點了我想問的 XD, 我不確 char** evn 是否所有情
07/28 15:19, 18F

07/28 15:19, , 19F
況都可用 ?
07/28 15:19, 19F

07/28 15:20, , 20F
其實我也不知道,我沒真的用過它,只是在書上看過 XD
07/28 15:20, 20F

07/28 15:20, , 21F
CMD的錯誤應該是 目錄位置不對的原因導致的...
07/28 15:20, 21F

07/28 15:22, , 22F
要用cd調整位置 or 直接把執行檔與文件拉進去(自己打絕對
07/28 15:22, 22F

07/28 15:22, , 23F
路徑也可)
07/28 15:22, 23F

07/28 15:27, , 24F
DEV C++的問題是參數太少 沒有argv[1]
07/28 15:27, 24F

07/28 15:37, , 25F
請愛加void 於main 的arg 來標示清楚...
07/28 15:37, 25F

07/28 17:16, , 26F
請問樓上我知道有main(void) 可是如何有void又有argc呢
07/28 17:16, 26F

07/28 17:21, , 27F
有void 就不要有arg 儘量不要寫int main()而是main(void)
07/28 17:21, 27F

07/28 21:55, , 28F
char** evn 有些平台有 不過標準只有james講的兩種
07/28 21:55, 28F

07/28 21:57, , 29F
C++可以不寫void C99一定要加void
07/28 21:57, 29F

07/28 21:59, , 30F
原來如此,感謝樓上
07/28 21:59, 30F
文章代碼(AID): #1ECGNXp0 (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
3
20
完整討論串 (本文為第 2 之 2 篇):
問題
3
20
問題
3
30
文章代碼(AID): #1ECGNXp0 (C_and_CPP)