1. 程式人生 > >7.1 printf與scanf

7.1 printf與scanf

1.格式化的輸入輸出

  • printf 返回輸出的字元數
    • %[flags][width][.prec][hlL]type
  • scanf 返回讀入的專案數
    • %[flag]type
      在要求嚴格的程式中,應該判斷每次呼叫scanf或printf的返回值,從而瞭解程式執行中是否存在問題
#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;
}