日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[ACM训练] ACM中巧用文件的输入输出来改写acm程序的输入输出 + ACM中八大输入输出格式...

發布時間:2023/12/2 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [ACM训练] ACM中巧用文件的输入输出来改写acm程序的输入输出 + ACM中八大输入输出格式... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ACM中巧用文件的輸入輸出來改寫acm程序的輸入輸出

經常有見大神們使用文件來代替ACM程序中的IO,尤其是當程序IO比較復雜時,可以使自己能夠更專注于代碼的測試,而不是怎樣敲輸入。


?

C/C++代碼中:

使用 ? ?stdio.h ? ?中包含的另一個函數freopen函數

FILE * freopen ( const char * filename, const char * mode, FILE * stream );
文件名,打開的模式,文件指針,通常使用標準流文件(stdin/stdout/stderr)

?

因為文件指針使用的是標準流文件,因此我們可以不定義文件指針。

freopen("data.in", "r", stdin); //使用freopen()函數以只讀方式r(read)打開輸入文件data.in

freopen("data.out", "w", stdout); //使用freopen()函數以寫入方式w(write)打開輸出文件data.out

這樣我們就不再需要修改scanf和printf,因為freopen()函數重定向了標準流,使其指向前面指定的文件。

最后只要使用fclose關閉輸入文件和輸出文件即可。

fclose(stdin);
fclose(stdout);

    

    若要恢復句柄,可以重新打開標準控制臺設備文件,只是這個設備文件的名字是與操作系統相關的。

    DOS/Win:freopen("CON", "r", stdin);

    Linux: ?freopen("/dev/console", "r", stdin);

?

//在程序目錄下建立兩個文件,data.in和data.out文件

1 #include <stdio.h> 2 3 int main() 4 { 5 freopen("data.in", "r", stdin); 6 //freopen("data.out", "w", stdout); 7 /* 中間按原樣寫代碼,什么都不用修改 */ 8 9 10 11 12 fclose(stdin); 13 //fclose(stdout); 14 return 0; 15 } //提交代碼時只需要注釋掉這四句話即可。

?而針對于C++的版本則可以這么來寫:

1 #include <fstream> 2 streambuf *backup= cin.rdbuf(); //備份標準輸入 3 ifstream fin; 4 fin.open("data.in"); 5 cin.rdbuf(fin.rdbuf()); 6 // ... cin will read from file 7 8 9 10 11 cin.rdbuf(backup); // restore cin's original streambuf

不過此版本的代碼不如上面的C版本的代碼簡潔,推薦使用C版本的代碼!

?


?

最近也常使用Python來寫一些在線編程的題目,這里也對應總結一下在Python中的處理方法:

?pass

?

其實針對這里的重定向的意義在于方便對程序的輸入做一個處理,故而只需要處理輸入即可,輸出直接輸出到控制臺上看起來更為直觀。

?

?

?

?下面對ACM中的相關輸入輸出格式做一個總結:


?

?最常見的輸入輸出個是大致有八種:

1、有多組輸入數據,但沒有具體的告訴你有多少組,只是讓你對應每組輸入,應該怎樣輸出

C/C++中的處理情況Python中的處理情況
1 while(cin>>a>>b) 2 { 3 //處理; 4 } 1 while True: 2 try: 3 a, b = map(int, raw_input().strip().split())#這里將前后空格去掉,并且按照空白符進行拆分 4 #pass5 except EOFError: 6 break

?

2、輸入一個整數n,告訴我們接下來有n組數據,然后在輸入數據的具體數據

C/C++中的處理情況Python中的處理情況
? 1 while(cin>>n) 2 { 3 for(i=0;i<n;i++) 4 { 5 cin>>a>>b; 6 //處理; 7 } 8 } 1 while True: 2 try: 3 tcase = int(raw_input().strip()) 4 for case in range(tcase): 5 a, b = map(int, raw_input().strip().split()) 6 7 #pass 8 except EOFError: 9 break

?

?

#pass

?

?

3、有多組輸入數據,但是沒有具體明確有多少組,但是明確當遇見0,0時結束

C/C++中的處理情況Python中的處理情況
??

?

4、有多組輸入數據,但是沒有具體明確有多少組,但是明確當遇見0,0時結束

C/C++中的處理情況Python中的處理情況
??

?

?

5、有多組輸入數據,但是沒有具體明確有多少組,但是明確當遇見0,0時結束

C/C++中的處理情況Python中的處理情況
??

?

?

6、有多組輸入數據,但是沒有具體明確有多少組,但是明確當遇見0,0時結束

C/C++中的處理情況Python中的處理情況
??

?

?

7、有多組輸入數據,但是沒有具體明確有多少組,但是明確當遇見0,0時結束

C/C++中的處理情況Python中的處理情況
??

?

?

8、有多組輸入數據,但是沒有具體明確有多少組,但是明確當遇見0,0時結束

C/C++中的處理情況Python中的處理情況
??

轉載于:https://www.cnblogs.com/yushuo1990/p/5952424.html

總結

以上是生活随笔為你收集整理的[ACM训练] ACM中巧用文件的输入输出来改写acm程序的输入输出 + ACM中八大输入输出格式...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。