命名空間
變體
動作

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  /* 由實作定義 */
(1)
#define stdout /* 由實作定義 */
(2)
#define stderr /* 由實作定義 */
(3)

預定義了三個文字串流。這些串流在程式啟動時會隱式開啟,且為無導向(unoriented)狀態。

1) 關聯至標準輸入串流,用於讀取常規輸入。在程式啟動時,若且唯若該串流被確定不指向互動式裝置,該串流才會被全緩衝(fully buffered)。
2) 關聯至標準輸出串流,用於寫入常規輸出。在程式啟動時,若且唯若該串流被確定不指向互動式裝置,該串流才會被全緩衝。
3) 關聯至標準錯誤串流,用於寫入診斷輸出。在程式啟動時,該串流不會被全緩衝。

何謂互動式裝置由實作定義。

這些巨集會展開為型別為 std::FILE* 的運算式。

[編輯] 備註

雖然 POSIX 並未強制規定,但 UNIX 的慣例是:若 stdinstdout 關聯至終端機,則它們為行緩衝(line-buffered),而 stderr 則為無緩衝。

這些巨集可能會展開為可修改的左值(lvalue)。若任何此類 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 Deutsch 日本語 中文(简体) 中文(繁體)