名稱空間
變體
操作

stdin, stdout, stderr

來自 cppreference.com
< cpp‎ | io‎ | c
 
 
 
C 風格 I/O
型別和物件
stdinstdoutstderr
函式
檔案訪問
直接輸入/輸出
非格式化輸入/輸出
格式化輸入
(C++11)(C++11)(C++11)    
(C++11)(C++11)(C++11)    
 
定義於標頭檔案 <cstdio>
#define stdin  /* implementation-defined */
(1)
#define stdout /* implementation-defined */
(2)
#define stderr /* implementation-defined */
(3)

預定義了三個文字流。這些流在程式啟動時隱式開啟且未定向。

1)標準輸入流關聯,用於讀取常規輸入。在程式啟動時,當且僅當流被確定不指向互動裝置時,流才被完全緩衝。
2)標準輸出流關聯,用於寫入常規輸出。在程式啟動時,當且僅當流被確定不指向互動裝置時,流才被完全緩衝。
3)標準錯誤流關聯,用於寫入診斷輸出。在程式啟動時,流未被完全緩衝。

什麼是互動裝置由實現定義。

這些宏被展開為 std::FILE* 型別的表示式。

[編輯] 注意

儘管 POSIX 沒有強制要求,但 UNIX 慣例是如果 stdinstdout 與終端關聯,它們是行緩衝的,而 stderr 是無緩衝的。

這些宏可以展開為可修改的左值。如果這些 std::FILE* 左值中的任何一個被修改,則對相應流的後續操作將導致未指定或未定義的行為。

[編輯] 示例

此示例展示了一個類似於 std::printf 的函式。

#include <concepts>
#include <cstdio>
#include <type_traits>
 
template<typename T>
concept IsPrintable = std::integral<T> or std::floating_point<T> or std::is_pointer_v<T>;
 
int my_printf(char const* const format, IsPrintable auto const ... arguments)
{
    return std::fprintf(stdout, format, arguments...);
}
 
int main(int argv, char*[])
{
    my_printf("Strings and chars:\t%s %c\n", "hello", 'x');
    my_printf("Rounding:\t\t%f %.0f %.32f\n", 1.5, 1.5, 1.3);
    my_printf("Padding:\t\t%05.2f %.2f %5.2f\n", 1.5, 1.5, 1.5);
    my_printf("Scientific:\t\t%E %e\n", 1.5, 1.5);
    my_printf("Hexadecimal:\t\t%a %A 0x%X\n", 1.5, 1.5, &argv);
}

可能的輸出

Strings and chars:  hello x
Rounding:           1.500000 2 1.30000000000000004440892098500626
Padding:            01.50 1.50  1.50
Scientific:         1.500000E+00 1.500000e+00
Hexadecimal:        0x1.8p+0 0X1.8P+0 0x2CFB41BC

[編輯] 參閱

從標準 C 輸入流 stdin 讀取
(全域性物件)[編輯]
寫入標準 C 輸出流 stdout
(全域性物件)[編輯]
寫入標準 C 錯誤流 stderr,無緩衝
(全域性物件)[編輯]
寫入標準 C 錯誤流 stderr
(全域性物件)[編輯]
將格式化輸出列印到 stdout、檔案流或緩衝區
(函式) [編輯]
物件型別,能夠儲存控制 C I/O 流所需的所有資訊
(typedef) [編輯]
C 文件 關於 stdin, stdout, stderr
English 日本語 中文(简体) 中文(繁體)