- 使用fscanf/fprintf:先定義FILE指標*fin, *fout指到檔案,之後使用fscanf/fprintf時,把fin/fout當作第一個參數,而第二個、第三個分別與scanf/printf的第一個、第二個相同。
#include
int main(int argc, char *argv[]){ // define fin, fout as a FILE pointer FILE *fin = fopen(argv[1], "r"), *fout= fopen(argv[2], "w"); // copy whatever in the fin to fout char c; while(fscanf(fin, "%c", &c) != EOF){ fprintf(fout, "%c", c); } fclose(fin); fclose(fout); return 0; } - 使用freopen:此時我們把原本的鍵盤輸入輸出(standard input/output, or stdin/sdtout)改成檔案的輸入輸出,於是乎之後的所有print, scanf會直接輸入/輸出到檔案。
#include
int main(int argc, char *argv[]){ // redirect stdin/stdout to file read/write freopen(argv[1], "r", stdin); freopen(argv[2], "w", stdout); // copy everything char c; while(scanf("%c", &c) != EOF){ printf("%c", c); } return 0; }
討論:
- 第一種方法(fscanf/fprintf)執行起來比較沒有效率,因為每一次都要透過FILE指標,找對應的檔案。
- 第二種方法執行過freopen就沒有辦法再使用stdin/stdout的printf/scanf了。
No comments:
Post a Comment