## printf ##
格式化輸出數據
### 相關函數 ###
scanf,snprintf
### 表頭文件 ###
```
#include<stdio.h>
```
### 定義函數 ###
```
int printf(const char *format, ...);
```
### 函數說明 ###
printf()會根據參數format字符串來轉換并格式化數據,然后將結果寫出到標準輸出設備,直到出現字符串結束('\0')為止。參數format字符串可包含下列三種字符類型
1. 一般文本,伴隨直接輸出。
2. ASCII控制字符,如\t、\n等。
3. 格式轉換字符。
格式轉換為一個百分比符號(%)及其后的格式字符所組成。一般而言,每個%符號在其后都必需有一printf()的參數與之相呼應(只有當%%轉換字符出現時會直接輸出%字符),而欲輸出的數據類型必須與其相對應的轉換字符類型相同。
Printf()格式轉換的一般形式如下
```
%(flags)(width)(.prec)type
```
以中括號括起來的參數為選擇性參數,而%與type則是必要的。底下先介紹type的幾種形式
**整數**
%d 整數的參數會被轉成一有符號的十進制數字
%u 整數的參數會被轉成一無符號的十進制數字
%o 整數的參數會被轉成一無符號的八進制數字
%x 整數的參數會被轉成一無符號的十六進制數字,并以小寫abcdef表示
%X 整數的參數會被轉成一無符號的十六進制數字,并以大寫ABCDEF表示浮點型數
%f double 型的參數會被轉成十進制數字,并取到小數點以下六位,四舍五入。
%e double型的參數以指數形式打印,有一個數字會在小數點前,六位數字在小數點后,而在指數部分會以小寫的e來表示。
%E 與%e作用相同,唯一區別是指數部分將以大寫的E 來表示。
%g double 型的參數會自動選擇以%f 或%e 的格式來打印,其標準是根據欲打印的數值及所設置的有效位數來決定。
%G 與%g 作用相同,唯一區別在以指數形態打印時會選擇%E 格式。
**字符及字符串**
%c 整型數的參數會被轉成unsigned char型打印出。
%s 指向字符串的參數會被逐字輸出,直到出現NULL字符為止
%p 如果是參數是“void *”型指針則使用十六進制格式顯示。
prec 有幾種情況
1. 正整數的最小位數。
2. 在浮點型數中代表小數位數
3. 在%g 格式代表有效位數的最大值。
4. 在%s格式代表字符串的最大長度。
5. 若為×符號則代表下個參數值為最大長度。
width為參數的最小長度,若此欄并非數值,而是*符號,則表示以下一個參數當做參數長度。
flags 有下列幾種情況
```
#NAME?
```
\+ 一般在打印負數時,printf()會加印一個負號,整數則不加任何負號。此旗標會使得在打印正數前多一個正號(+)。
\# 此旗標會根據其后轉換字符的不同而有不同含義。當在類型為o 之前(如%#o),則會在打印八進制數值前多印一個o。
而在類型為x 之前(%#x)則會在打印十六進制數前多印’0x’,在型態為e、E、f、g或G 之前則會強迫數值打印小數點。在類型為g 或G之前時則同時保留小數點及小數位數末尾的零。
0 當有指定參數時,無數字的參數將補上0。默認是關閉此旗標,所以一般會打印出空白字符。
### 返回值 ###
成功則返回實際輸出的字符數,失敗則返回-1,錯誤原因存于errno中。
### 范例 ###
```
#include<stdio.h>
main()
{
int i = 150;
int j = -100;
double k = 3.14159;
printf(“%d %f %x\n”,j,k,i);
printf(“%2d %*d\n”,i,2,i); /*參數2 會代入格式*中,而與%2d同意義*/
}
```
### 執行 ###
```
-100 3.14159 96
150 150
```
- 字符測試篇
- isalnum
- isalpha
- isascii
- iscntrl
- isdigit
- isgraphis
- islower
- isprint
- isspace
- ispunct
- isupper
- isxdigit
- 字符串轉換篇
- atof
- atoi
- atol
- gcvt
- strtod
- strtol
- strtoul
- toascii
- tolower
- toupper
- 內存控制篇
- calloc
- free
- getpagesize
- malloc
- mmap
- munmap
- 日期時間篇
- asctime
- ctime
- gettimeofday
- gmtime
- localtime
- mktime
- settimeofday
- time
- 內存及字符串操作篇
- bcmp
- bcopy
- bzero
- index
- memccpy
- memchr
- memcmp
- memcpy
- memmove
- memset
- rindex
- strcasecmp
- strcat
- strchr
- strcmp
- strcoll
- strcpy
- strcspn
- strdup
- strlen
- strncasecmp
- strncat
- strncpy
- strpbrk
- strrchr
- strspn
- strstr
- strtok
- 常用數學函數篇
- abs
- acos
- asin
- atan
- atan2
- ceil
- cos
- cosh
- exp
- frexp
- ldexp
- log
- log10
- pow
- sin
- sinh
- sqrt
- tan
- tanh
- 用戶組篇
- endgrent
- endpwent
- endutent
- fgetgrent
- fgetpwent
- getegid
- geteuid
- getgid
- getgrent
- getgrgid
- getgrnam
- getgroups
- getpw
- getpwent
- getpwnam
- getpwuid
- getuid
- getutent
- getutid
- getutline
- initgroups
- pututline
- seteuid
- setfsgid
- setfsuid
- setgid
- setgrent
- setgroups
- setpwent
- setregid
- setreuid
- setuid
- setutent
- utmpname
- 數據結構及算法篇
- crypt
- bsearch
- lfind
- lsearch
- qsort
- rand
- srand
- 文件操作篇
- close
- creat
- dup
- dup2
- fcntl
- flock
- fsync
- lseek
- mkstemp
- open
- read
- sync
- write
- 文件內容操作篇
- clearerr
- fclose
- fdopen
- feof
- fflush
- fgetc
- fgets
- fileno
- fopen
- fputc
- fputs
- fread
- freopen
- fseek
- ftell
- fwrite
- getc
- getchar
- gets
- mktemp
- putc
- putchar
- rewind
- setbuf
- setbuffer
- setlinebuf
- setvbuf
- ungetc
- 進程操作篇
- atexit
- execl
- execlp
- execv
- execve
- execvp
- exit
- _exit
- vfork
- getpgid
- getpgrp
- getpid
- getppid
- getpriority
- nice
- on_exit
- setpgid
- setpgrp
- setpriority
- system
- wait
- waitpid
- 格式化輸入輸出篇
- fprintf
- fscanf
- printf
- scanf
- sprintf
- sscanf
- vfprintf
- vfscanf
- vprintf
- vscanf
- vsprintf
- vsscanf
- 文件權限控制篇
- access
- alphasort
- chdir
- chmod
- chown
- chroot
- closedir
- fchdir
- fchmod
- fchown
- fstat
- ftruncate
- getcwd
- link
- lstat
- opendir
- readdir
- readlink
- remove
- rename
- rewinddir
- seekdir
- stat
- symlink
- telldir
- truncate
- umask
- unlink
- utime
- utimes
- 信號處理篇
- alarm
- kill
- pause
- sigaction
- sigaddset
- sigdelset
- sigemptyset
- sigfillset
- sigismember
- signal
- sigpending
- sigprocmask
- sleep
- ferror
- perror
- strerror
- mkfifo
- pclose
- pipe
- popen
- 接口處理篇
- accept
- bind
- connect
- endprotoent
- endservent
- getsockopt
- htonl
- htons
- inet_addr
- inet_aton
- inet_ntoa
- listen
- ntohl
- ntohs
- recv
- recvfrom
- recvmsg
- send
- sendmsg
- sendto
- setprotoent
- setservent
- setsockopt
- shutdown
- socket
- 環境變量篇
- getenv
- putenv
- setenv
- 終端控制篇
- getopt
- isatty
- select
- ttyname