7.1 printf與scanf
阿新 • • 發佈:2019-02-04
1.格式化的輸入輸出
- printf 返回輸出的字元數
- %[flags][width][.prec][hlL]type
- scanf 返回讀入的專案數
- %[flag]type
在要求嚴格的程式中,應該判斷每次呼叫scanf或printf的返回值,從而瞭解程式執行中是否存在問題
- %[flag]type
#include<stdio.h>
int main(int argc, const char *argv)
{
int num;
int i1 = scanf("%i", &num);//輸入123
int i2 = printf("%d\n", num);//輸出123
printf("%d:%d\n", i1, i2);//輸出1:4
return 0;
}
2. printf
2.1 flag
-:左對齊
+:在前邊放+或-
(space):正數留空
0:用0填充
#include <stdio.h>
int main(int argc, const char *argv)
{
printf("%9d\n", 123); // 123 佔9位,右對齊,123前邊補6個空格
printf("%-9d\n", 123); //123
printf("%+9d\n", 123); // +123 佔9位,右對齊,+123前邊補5個空格
printf("%+-9d\n", 123);//+123
printf("%-+9d\n", 123);//+123
printf("%-+9d\n",-123);//-123
printf("%09d\n", 123);//000000123
printf("%-09d\n",-123);//-123
return 0;
}
2.2 width 或 prec
number:最小字元數
*:下一個引數是字元數
.number:小數點後的數位
.*:下一個引數是小數點後的位數
#include <stdio.h>
int main(int argc, const char *argv)
{
printf("%*d\n", 6, 123);// 123 相當於%6d,佔6位,123前加3個空格
printf("%9.2f\n", 123.4);// 123.40
return 0;
}
2.3 型別修飾
hh:單個位元組
h:short
l:long
ll:long long
L:long double
#include <stdio.h>
int main(int argc, const char **argv)
{
printf("%hhd\n", (char)12345); //57
printf("%9.2f\n", 123.4);// 123.40 佔9位,123.40前加3個空格
return 0;
}
2.4 type
i或d:int
u:unsigned int
g或G:float
o:八進位制
a或A:十六進位制浮點數
x:字母小寫的十六進位制
X:字母大寫的十六進位制
c:char
s:字串
p:指標
f或F:預設顯示6位小數的float
e或E:指數
n:讀入/寫出的個數
3.scanf
3.1 flag
*:跳過
數字:最大字元數
hh:char
h:short
l:long,double
ll:long long
L:long double
#include<stdio.h>
int main(){
int num;
scanf("%d", &num);
printf("%d\n", num);
return 0;
}
3.2 type
d:int
s:字串
i:整數,可能為十六進位制或八進位制
u:unsigned int
o:八進位制
x:十六進位制
a,e,f,g:float
c:char
[…]:所允許的字元
p:指標
#include<stdio.h>
int main(int argc, const char *argv)
{
int num;
scanf("%i", &num);//輸入 0x12
printf("%d\n", num);//輸出18
return 0;
}