使用c樣式i/o進行編程時,我有時會使用freopen()重新打開stdin以進行測試,這樣我就不必重複輸入輸入。我想知道是否有相當於C++ i/o流。另外,我知道我可以使用管道在命令行/終端/任何炎症上重定向它,但我想知道是否有辦法在我的代碼中執行它(因爲正如你所看到的,我並不是很瞭解CL/T/W)。freopen()等效於C++流
回答
freopen
也可以與cin
和cout
一起使用。無需搜索新的東西。
freopen("input.txt", "r", stdin); // redirects standard input
freopen("output.txt", "w", stdout); // redirects standard output
int x;
cin >> x; // reads from input.txt
cout << x << endl; // writes to output.txt
編輯:從C++標準27.3.1:
從與該對象相關聯的標準輸入流緩衝區,在
<cstdio>
聲明CIN控制輸入的對象。
因此,根據標準,如果我們重定向stdin
它也將重定向cin
。反之亦然cout
。
不,不。這個程序有未定義的行爲。 – 2011-03-10 14:38:23
@R ..我在視覺工作室和g ++上用了很多次,我沒有任何問題。你能解釋一下它究竟有什麼問題嗎? – UmmaGumma 2011-03-10 14:59:19
僅僅因爲某個實現有效,並不意味着它是有效的C++。最後我檢查了一下,它是*最好的*實現 - 定義了對stdio的更改是否在相應的iostream中可見,反之亦然,並且可能更糟糕。 – 2011-03-10 16:31:16
This新聞組發佈探索您的選擇。
這是依賴於系統和海報沒有指出 系統,但cin.clear()應該工作。我已經測試了帶有AT & T版本的iostreams的UNIX系統上附帶的 程序。
#include <iostream.h>
int main()
{
for(;;) {
if (cin.eof()) {
cout << "EOF" << endl;
cin.clear();
}
char c ;
if (cin.get(c)) cout.put(c) ;
}
}
是的,工作在Cfront的和TC++沒關係。 在G ++哪裏出了問題首次出現附加一個動作是必需的:
cin.clear();
rewind (_iob); // Seems quite out of place, doesn't it?
// cfront also accepts but doesn't
// require this rewind.
雖然我注意到,這是在1991年,它仍然應該工作。請記住使用現在的標準iostream
標題,而不是iostream.h
。
(順便說一句,我發現後與谷歌搜索詞「重新打開CIN C++」,第二個結果。)
讓我們知道您的身體情況如何。您也可以使用freopen
。
像這樣混合使用C stdio和C++ iostream的用法是無效的,並且會導致實現定義或未定義的行爲。 – 2011-03-10 14:39:27
對不起,我真的不明白這與我的問題有何關係。你能解釋更多嗎? – quasiverse 2011-03-11 10:05:16
@quasiverse:這是關於通過'cin'重新打開STDIN。 – 2011-03-11 10:12:52
#include <iostream>
#include <fstream>
int main() {
// Read one line from stdin
std::string line;
std::getline(std::cin, line);
std::cout << line << "\n";
// Read a line from /etc/issue
std::ifstream issue("/etc/issue");
std::streambuf* issue_buf = issue.rdbuf();
std::streambuf* cin_buf = std::cin.rdbuf(issue_buf);
std::getline(std::cin, line);
std::cout << line << "\n";
// Restore sanity and read a line from stdin
std::cin.rdbuf(cin_buf);
std::getline(std::cin, line);
std::cout << line << "\n";
}
- 1. Java中的freopen的等效
- 2. IsNan等效於C
- 3. fgets等效於C++
- 4. DataInputStream.skip等效於C#
- 5. curl等效於C#
- 6. Response.Redirect等效於C#
- 7. IronPython'execfile'等效於C#
- 8. DebugBreak()等效於C#
- 9. Fortran相當於freopen
- 10. 等效於C++的DoEvents?
- 11. C#等效於/ Gh標誌
- 12. mkdir -p等效於C
- 13. C#String.Format()等效於PHP?
- 14. MonoCouch(C#)等效於rangeOfCharacterFromSet
- 15. C#Uri.EscapeDatastring()等效於Java
- 16. Cobertura等效於C#.NET嗎?
- 17. checkstyle等效於C++嗎?
- 18. C#等效於史努比
- 19. Java SHA1等效於C#
- 20. c#TempData等效於php
- 21. JavaScript等效於C#的Char.IsSymbol
- 22. objective-c等效於C++ numeric_limits :: max()
- 23. freopen命令的路徑C++
- 24. 等效於WM_MOVE
- 25. C++ urljoin等效
- 26. fscanf C++等效
- 27. Worklow Foundation(.NET)等效於Python,Java,C++嗎?
- 28. 等效於C中的Swing包#
- 29. F#等效於C#的「extern alias」
- 30. VB.NET等效於C#'dynamic'與Option Strict On
你能讀取相同數據兩次,當你有相同流的兩個文件描述符?如果沒有,你總是可以在C++中使用std :: cin的多個實例 – LumpN 2011-03-10 09:28:05
[如何將cin和cout重定向到文件?](http://stackoverflow.com/questions/10150468/how-to-redirect- cin-and-cout-to-files) – Vadzim 2016-07-21 12:56:45