printf
、 、 _printf_l
、 wprintf
_wprintf_l
將格式化輸出列印至標準輸出資料流。 這些函式有更安全的版本可供使用;請參閱 、、wprintf_s
_printf_s_l
、。printf_s
_wprintf_s_l
語法
int printf(
const char *format [,
argument]...
);
int _printf_l(
const char *format,
_locale_t locale [,
argument]...
);
int wprintf(
const wchar_t *format [,
argument]...
);
int _wprintf_l(
const wchar_t *format,
_locale_t locale [,
argument]...
);
參數
format
控制項格式。
argument
選擇性引數。
locale
要使用的地區設定。
傳回值
傳回列印的字元數;如果發生錯誤,則為負值。 如果 format
為 NULL
,將會叫用無效參數處理常式,如參數驗證 (部分機器翻譯) 中所述。 如果允許繼續執行,則函式會傳回 -1 並將 errno
設定為 EINVAL
。 如果在 EOF
中 argument
遇到 (0xFFFF),則函式會傳回 -1。
如需和錯誤碼的相關資訊errno
,請參閱errno
、 _doserrno
_sys_errlist
和 _sys_nerr
。
備註
printf
函式會格式化一連串的字元和值,並將其列印至標準輸出資料流 stdout
。 如果引數接在 format
字串之後,format
字串必須包含決定引數輸出格式的規格。 printf
和 fprintf
的行為相同,不同之處在於 printf
將輸出寫入 至 stdout
,而不是寫入 類型的 FILE
目的地。
wprintf
是寬字元版本的 printf
;format
是寬字元字串。 如果資料流在 ANSI 模式中開啟,則 wprintf
和 printf
的行為相同。 printf
目前不支援輸出至 UNICODE 資料流。
這些有 _l
尾碼的函式版本是一樣的,不同之處在於會使用傳入的地區設定,而不使用目前的執行緒地區設定。
format
引數是由一般字元、逸出序列和格式規格 (如果引數接在 format
之後) 所組成。 一般字元和逸出序列會依其出現的順序複製到 stdout
。 例如,下面這行:
printf("Line one\n\t\tLine two\n");
產生下列輸出:
Line one
Line two
格式規格一律會以百分比符號 (%) 開頭,並由左讀到右。 當 printf
遇到第一個格式規格 (如果有) 時,它會轉換 format
後面的第一個引數值,並將其據以輸出。 第二個格式規格會轉換及輸出第二個引數,依此類推。 如果引數的數目大於格式規格的數目,則會略過額外的引數。 如果所有格式規格的自變數不足,則結果為未定義。
重要
確認 format
不是使用者定義的字串。
一般文字常式對應
Tchar.h 常式 |
_UNICODE 和 _MBCS 未定義 |
_MBCS 已定義 |
_UNICODE 已定義 |
---|---|---|---|
_tprintf |
printf |
printf |
wprintf |
_tprintf_l |
_printf_l |
_printf_l |
_wprintf_l |
需求
常式 | 必要的標頭 |
---|---|
printf , _printf_l |
<stdio.h> |
wprintf , _wprintf_l |
<stdio.h> 或 <wchar.h> |
通用 Windows 平台 (UWP) 應用程式中不支援主控台。 與主控台 stdin
、stdout
和 stderr
相關聯的標準資料流控制代碼必須重新導向,之後 C 執行階段函式才能在 UWP 應用程式中使用它們。 如需相容性詳細資訊,請參閱相容性。
重要
從 Windows 10 版本 2004 (組建 19041) 開始,函式 printf
系列會根據 IEEE 754 規則來列印可精確表示的浮點數以進行四捨五入。 在舊版的 Windows 中,「5」結尾的可精確表示浮點數一律會四捨五入。 IEEE 754指出,浮點數必須四捨五入到最接近的偶數位數 (也稱為「四捨六入五成雙」)。 例如,printf("%1.0f", 1.5)
和 printf("%1.0f", 2.5)
應該四捨五入為 2。 先前,1.5 會四捨五入為 2,而 2.5 會四捨五入為 3。 這項變更只會影響可精確表示的位數。 例如,2.35 (在記憶體中表示時會接近 2.35000000000000008) 會繼續四捨五入至 2.4。 這些函式所完成的四捨五入現在也會遵守 fesetround
所設定的浮點數四捨五入模式。 之前,四捨五入一律會選擇 FE_TONEAREST
行為。 這項變更只會影響使用 Visual Studio 2019 16.2 版和更新版本所建置的程式。 若要使用舊版浮點捨入行為,請與 legacy_stdio_float_rounding.obj
連結。
範例
// crt_printf.c
// This program uses the printf and wprintf functions
// to produce formatted output.
#include <stdio.h>
int main( void )
{
char ch = 'h',
*string = "computer";
wchar_t wch = L'w',
*wstring = L"Unicode";
int count = -9234;
double fp = 251.7366;
// Display integers
printf( "Integer formats:\n"
" Decimal: %d Justified: %.6d "
"Unsigned: %u\n",
count, count, count, count );
// Display decimals
printf( "Decimal %d as:\n Hex: %Xh "
"C hex: 0x%x Octal: %o\n",
count, count, count, count );
// Display in different radixes
printf( "Digits 10 equal:\n Hex: %i "
"Octal: %i Decimal: %i\n",
0x10, 010, 10 );
// Display characters
printf("Characters in field (1):\n"
"%10c%5hc%5C%5lc\n",
ch, ch, wch, wch);
wprintf(L"Characters in field (2):\n"
L"%10C%5hc%5c%5lc\n",
ch, ch, wch, wch);
// Display strings
printf("Strings in field (1):\n%25s\n"
"%25.4hs\n %S%25.3ls\n",
string, string, wstring, wstring);
wprintf(L"Strings in field (2):\n%25S\n"
L"%25.4hs\n %s%25.3ls\n",
string, string, wstring, wstring);
// Display real numbers
printf("Real numbers:\n %f %.2f %e %E\n",
fp, fp, fp, fp );
// Display pointer
printf( "\nAddress as: %p\n", &count);
}
範例輸出
Integer formats:
Decimal: -9234 Justified: -009234 Unsigned: 4294958062
Decimal -9234 as:
Hex: FFFFDBEEh C hex: 0xffffdbee Octal: 37777755756
Digits 10 equal:
Hex: 16 Octal: 8 Decimal: 10
Characters in field (1):
h h w w
Characters in field (2):
h h w w
Strings in field (1):
computer
comp
Unicode Uni
Strings in field (2):
computer
comp
Unicode Uni
Real numbers:
251.736600 251.74 2.517366e+002 2.517366E+002
Address as: 0012FF3C
另請參閱
格式規格語法: printf
和 wprintf
函式
數學與浮點支援
資料流 I/O
地區設定
fopen
, _wfopen
_fprintf_p
、 、 _fprintf_p_l
、 _fwprintf_p
_fwprintf_p_l
scanf
、 、 _scanf_l
、 wscanf
_wscanf_l
sprintf
、、 _sprintf_l
、 swprintf
、 _swprintf_l
、 __swprintf_l
vprintf
函數
_set_output_format