回高一首頁〕〔回上一頁

 

補充教材:

完整範例:(參考網頁:http://caterpillar.onlyfun.net/Gossip/CGossip/PrintfScanf.html

基本上,要顯示的是什麼資料型態,就必須搭配對應資料型態的格式指定字,但%d若用來輸出某個字元,將顯示其整數編碼值,若%c用來顯示某個整數,將顯示該整數對應編碼的字元,一個使用的範例如下所示:
#include <stdio.h>

int main(void) {
printf("顯示字元 %c\n", 'A');
printf("顯示字元編碼 %d\n", 'A');
printf("顯示字元編碼 %c\n", 65);
printf("顯示十進位整數 %d\n", 15);
printf("顯示八進位整數 %o\n", 15);
printf("顯示十六進位整數 %X\n", 15);
printf("顯示十六進位整數 %x\n", 15);
printf("顯示科學記號 %E\n", 0.001234);
printf("顯示科學記號 %e\n", 0.001234);

return 0;
}

顯示結果如下所示:
顯示字元 A
顯示字元編碼 65
顯示字元編碼 A
顯示十進位整數 15
顯示八進位整數 17
顯示十六進位整數 F
顯示十六進位整數 f
顯示科學記號 1.234000E-003
顯示科學記號 1.234000e-003

您可以在輸出浮點數時指定精度,例如若為浮點數:
printf("example:%.2f\n", 19.234);

.2指定小數點後取兩位,執行結果會輸出:
example:19.23

您也可以指定輸出時,至少要預留的字元寬度,無論是數值或字串,例如:
printf("example:%6.2f\n", 19.234);

整數6表示預留6個字元寬度,由於預留了6個字元寬度,不足的部份要由空白字元補上,所以執行結果會輸出如下(19.23只佔五個字元,所以補上一個空白在前端):
example: 19.23

若在%之後指定負號,例如%-6.2f,則表示靠左對齊,沒有指定則靠右對齊,例如:
#include <stdio.h>

int main(void) {
printf("example:%6.2f\n", 19.234);
printf("example:%-6.2f\n", 19.234);

return 0;
}

顯示結果如下:
example: 19.23
example:19.23

若事先無法決定字元寬度,則可以使用*,例如:
#include <stdio.h>
#include <stdlib.h>

int main(void) {
printf("%*d\n", 1, 1);
printf("%*d\n", 2, 1);
printf("%*d\n", 3, 1);
return 0;
}

printf()的*將被之後的第一個引數所取代,所以第一個printf()將預留一個字元寬度,第二個預留兩個字元寬度,第三個預留三個,顯示結果如下:
1
 1
  1

如果打算取得使用者的輸入,則可以使用「標準輸入」(Standard input)的scanf()函式,並搭配格式指定字與&取址運算子指定給變數,例如: 
#include <stdio.h>

int main(void) {
int input;

printf("請輸入數字:");
scanf("%d", &input);
printf("您輸入的數字:%d\n", input);

return 0;
}

在程式中先宣告了一個整數變數input,使用scanf()函式時,若輸入的數值為整數,則使用格式指定字%d,若輸入的是 其它資料型態,則必須使用對應的格式指定字,如果是double,特別注意要使用%lf來指定,而您必須告知程式儲存資料的變數位址,為此,必須使用&取址運算子,這會將變數的記憶體位址取出,則 輸入的數值就知道變數的記憶體位址並儲存之(但字元陣列名稱本身就有位址資訊,故不用&來取址,之後說明陣列時會再看到)。

執行結果:
請輸入數字:10
您輸入的數字:10

scanf()在接受輸入時,可以接受多個值,也可以指定輸入的格式,例如:
#include <stdio.h>

int main(void) {
int number1, number2;

printf("請輸入兩個數字,中間使用空白區隔):");
scanf("%d %d", &number1, &number2);
printf("您輸入的數字:%d %d\n", number1, number2);

printf("請再輸入兩個數字,中間使用-號區隔):");
scanf("%d-%d", &number1, &number2);
printf("您輸入的數字:%d-%d\n", number1, number2);

return 0;
}

在第一個scanf()中,指定了使用空白來區隔兩個輸入,而第二個scanf()中,指定了使用-來區隔兩個輸入,一個執行與輸入的結果如下所示:
請輸入兩個數字,中間使用空白區隔):10 20
您輸入的數字:10 20
請再輸入兩個數字,中間使用-號區隔):30-40
您輸入的數字:30-40

scanf()進階說明:

scanf 讀取包含空白的字串

一般來說 scanf 遇到空白、\t、\n 就會自動中斷:

剛剛發現 scanf 可以自定欲接收的字元,改一下就可以接收空白等字元:

 

參考資料:C Gossip: printf() 與 scanf()

http://caterpillar.onlyfun.net/Gossip/CGossip/PrintfScanf.html

作者: 日落 撰寫於 12:24  

資料來源:http://zeroplex.blogspot.com/2010/02/scanf.html