freopen函數的使用:參見這篇博客https://www.cnblogs.com/moonlit/archive/2011/06/12/2078712.html
#include <stdio.h> int main() { int a,b; freopen("debug\\in.txt","r",stdin); //輸入重定向,輸入數據將從in.txt文件中讀取 freopen("debug\\out.txt","w",stdout); //輸出重定向,輸出數據將保存在out.txt文件中 while(scanf("%d %d",&a,&b)!=EOF) printf("%d\n",a+b); fclose(stdin);//關閉文件 fclose(stdout);//關閉文件 return 0; }
#include <stdio.h> #include <iostream.h> int main() { int a,b; freopen("debug\\in.txt","r",stdin); //輸入重定向,輸入數據將從in.txt文件中讀取 freopen("debug\\out.txt","w",stdout); //輸出重定向,輸出數據將保存在out.txt文件中 while(cin>>a>>b) cout<<a+b<<endl; // 注意使用endl fclose(stdin);//關閉文件 fclose(stdout);//關閉文件 return 0; }
freopen("debug\\in.txt","r",stdin)的作用就是把標准輸入流stdin重定向到debug\\in.txt文件中,這樣在用scanf或是用cin輸入時便不會從標准輸入流讀取數據,而是從in.txt文件中獲取輸入。只要把輸入數據事先粘貼到in.txt,調試時就方便多了。
類似的,freopen("debug\\out.txt","w",stdout)的作用就是把stdout重定向到debug\\out.txt文件中,這樣輸出結果需要打開out.txt文件查看。
需要說明的是:
1. 在freopen("debug\\in.txt","r",stdin)中,將輸入文件in.txt放在文件夾debug中,文件夾debug是在VC中建立工程文件時自動生成的調試文件夾。如果改成freopen("in.txt","r",stdin),則in.txt文件將放在所建立的工程文件夾下。in.txt文件也可以放在其他的文件夾下,所在路徑寫正確即可。
2. 可以不使用輸出重定向,仍然在控制台查看輸出。
3. 程序調試成功后,提交到oj時不要忘記把與重定向有關的語句刪除
freopen與fopen的區別:參見這篇博客:https://blog.csdn.net/joapolarbear/article/details/69062946
freopen作用是將標准輸入輸出重定向,stdin從鍵盤重定向到文件,stdout從屏幕重定向到文件,stderr也從屏幕重定向到文件,這樣操作的弊端就是會使得所有輸入輸出都將在文件中操作,而如果不想改變標准輸入輸出的方向,而只是想把部分數據寫入到文件或部分數據從文件中讀取,那么就需要用到fopen函數了,這個函數會為每個文件單獨創建一個文件輸入流或輸出流,而不會改變整體的輸入輸出流方向,所以這兩個函數都是有很大用處的
C語言中freopen()函數是用來重新定向的,所謂重新定向是給輸入和輸出的位置重新定向。原本輸入位置是鍵盤緩存區,輸出在屏幕上,用了重新定向后可以將輸入位置改變成一個文件,而輸出位置也可以輸出到一個文件中,具體代碼可以這么寫:
freopen ("text.txt","r",stdin); freopen ("text1.txt","w",stdout);
這里輸入和輸出便都在文件中操作了。可是這樣做有一個弊端,就是所有輸入輸出都將在文件中操作,如何靈活控制呢?這就要用到fopen()函數了,可以自由在文件輸入輸出中轉換,具體語法是:
FILE *fin,*fout; fin = fopen("text.txt","rb"); fout = fopen("text1.txt","wb"); fscanf (fin,"%d",&x); fprintf (fout,"%d",x); fclose(fin); fclose(fout);
這里函數稍微復雜了些,不過仔細看看也蠻簡單的,最重要的是多了文件關閉操作,這樣是為了不持續占用系統資源。在讀取、寫入操作時用“rb”的原因是為了兼容Linux系統,只在windows下運行只要“r”即可,同樣,scanf和printf函數都要改成fscanf和fprintf,在前面加上你要輸入的文件和輸出的文件名,這樣就可以有選擇性的操作文件了。
感謝兩位博主:https://www.cnblogs.com/moonlit/archive/2011/06/12/2078712.html
https://blog.csdn.net/joapolarbear/article/details/69062946