作者kusokiller (士官長)
看板C_and_CPP
標題Re: [問題] fopen
時間Thu Jul 28 14:46:55 2011
※ 引述《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
→ james732:int main(int argc, char *argv[]) <- main應該是這樣吧 07/28 14:51
→ kusokiller:原本是這樣可是我想說我沒有用到argc就先拿掉了 07/28 14:52
→ james732:那你先改回來試試看能不能正常運作 07/28 14:52
→ kusokiller:想說一次試一個功能 我把他加回去試看看 07/28 14:53
→ kusokiller:加回去就成功了 感謝 可是還是不太懂為什麼 @@ 07/28 14:55
推 LPH66:因為那叫參數列 底層呼叫時一定會放兩個參數上去 07/28 14:55
→ LPH66:所以你只寫一個就必然會出包 07/28 14:56
→ LPH66:就像 fopen 你一定是傳兩個參數進去 07/28 14:57
→ LPH66:那 fopen 的實作就不該偷懶說有參數用不到就不接 07/28 14:57
→ kusokiller:因為原始題目是一個有ifp也有ofp也有用argc檢查指令數 07/28 15:02
→ kusokiller:量對不對的程式 我不知道哪裡出錯才想說分開試看看 07/28 15:02
→ kusokiller:所以這不是個好的學習法嗎? 謝謝j大和L大 07/28 15:03
→ james732:總之只有int main()與int main(int argc, char *argv[]) 07/28 15:03
→ loveme00835:囧, 不要試一個功能就開一篇新文阿 07/28 15:03
→ james732:這兩種寫法,請不要弄出第三種組合 07/28 15:04
→ loveme00835:這樣整本練完不就... 07/28 15:04
→ james732:(那個加上環境變數版本的就暫且不討論...XD) 07/28 15:04
推 tropical72:超哥點了我想問的 XD, 我不確 char** evn 是否所有情 07/28 15:19
→ tropical72:況都可用 ? 07/28 15:19
→ james732:其實我也不知道,我沒真的用過它,只是在書上看過 XD 07/28 15:20
→ firejox:CMD的錯誤應該是 目錄位置不對的原因導致的... 07/28 15:20
→ firejox:要用cd調整位置 or 直接把執行檔與文件拉進去(自己打絕對 07/28 15:22
→ firejox:路徑也可) 07/28 15:22
→ firejox:DEV C++的問題是參數太少 沒有argv[1] 07/28 15:27
→ firejox:請愛加void 於main 的arg 來標示清楚... 07/28 15:37
→ kusokiller:請問樓上我知道有main(void) 可是如何有void又有argc呢 07/28 17:16
→ firejox:有void 就不要有arg 儘量不要寫int main()而是main(void) 07/28 17:21
推 stonehomelaa:char** evn 有些平台有 不過標準只有james講的兩種 07/28 21:55
→ stonehomelaa:C++可以不寫void C99一定要加void 07/28 21:57
→ james732:原來如此,感謝樓上 07/28 21:59