2013年6月10日 星期一

DIY - 智能小車:CCS C 語言的 printf fprintf 指令 (三十四)

DIY - 智能小車:CCS C 語言的 printf fprintf 指令 ()

使用 CCS C 語言來編寫 Microchip 16F877A 的程式給智能小車,CCS C 語言的 printf C18 厲害,所以要將 printf句法(Syntax)、參數(Function)、功能(Function)和 格式(Format)都記錄作參考。 

句法(Syntax): 
printf (string)
printf (cstring, values...)
printf (fname, cstring, values...)
fprintf (stream, cstring, values...) 

參數(Function):
String 是一個常量字符串或  終止空字符數的字符矩陣,數值是一個用逗號分隔的變量列表,fname 是功能名用於輸出(默認為 putc 的是沒有指定)的函數名。數據流是一個數據流標識符(一個常量的字節)。 

功能(Function):
輸出一個字符串的字符到標準的 RS-232 引腳(前兩種形式)或到指定的功能。格式會按照字符串參數。當使用變量時字符串必須是一個常數。 % 字符在字符串中使用,以指示一個變量值是要被格式化和輸出。Longs printf 會是1632位。 A%% 將輸出一個 %。以下格式化規則%。
如果使用 fprintf()函數,然後使用指定的字符流 printf()的違約到 STDOUT(最後使用RS232)。

格式(Format):
通用格式是採用 nt 形式。 n可選和可以 1-9 指定有多少個字符輸出,或 01-09 表明前導零,或 1.1 9.9 浮點 w 輸出。t類型,可為下列其中一個:

類型
描述
c
Character
s
String or character
u
Unsigned int
d
Singed int
Lu
Long unsigned int
Ld
Long signed int
x
Hex int (Lower case)
X
Hex int (Upper case)
Lx
Hex long int (Lower case)
LX
Hex long int (Upper case)
f
Float with truncated decimal
g
Float with rounded decimal
e
Float in exponential format
w
Unsigned int with decimal place inserted. Specify two numbers for n. The first is a total field width. The second is the desired number of decimal places.

格式示例:
Specifier
Value=0x12
Value=0xfe
%03u
018
254
%u
18
254
U%2u
18
*
%5
18
254
%d
18
-2
%x
12
fe
%X
12
FE
%4X
0012
00FE
%3.1w
1.8
25.4

示例程式:
#include 
#include 
int main() 
  { 
     char c, s[20], *p; 
     int a=1234, *i; 
     float f=3.141592653589; 
     double x=0.12345678987654321; 
     p="How do you do"; 
     strcpy(s, "Hello, Comrade"); 
     *i=12; 
      c='\x41'; 
      printf("a=%d\n", a);     /*結果輸出十進位整數a=1234*/ 
      printf("a=%6d\n", a);    /*結果輸出6位十進位數字a=  1234*/ 
      printf("a=%06d\n", a);   /*結果輸出6位十進位數字a=001234*/ 
      printf("a=%2d\n", a);    /*a超過2, 按實際輸出a=1234*/ 
      printf("*i=%4d\n", *i);  /*輸出4位元十進位整數*i=  12*/ 
      printf("*i=%-4d\n", *i); /*輸出左對齊4位元十進位整數*i=12*/ 
      printf("i=%p\n", i);     /*輸出位址i=06E4*/ 
      printf("f=%f\n", f);     /*輸出浮點數f=3.141593*/ 
      printf("f=6.4f\n", f);   /*輸出6位其中小數點後4位的浮點數f=3.1416*/ 
      printf("x=%lf\n", x);    /*輸出長浮點數x=0.123457*/ 
      printf("x=%18.16lf\n", x); /*輸出18位其中小數點後16位的長浮數                                                 x=0.1234567898765432*/ 
      printf("c=%c\n", c);     /*輸出字元c=A*/ 
      printf("c=%x\n", c);     /*輸出字元的ASCIIc=41*/ 
      printf("s[]=%s\n", s);   /*輸出陣列字串s[]=Hello, Comrade*/ 
      printf("s[]=%6.9s\n", s); /*輸出最多9個字元的字串s[]=Hello,Co*/ 
      printf("s=%p\n", s);     /*輸出陣列字串首字元位址s=FFBE*/ 
      printf("*p=%s\n", p);    /*輸出指標字串p=How do you do*/ 
      printf("p=%p\n", p);     /*輸出指針的p=0194*/ 
      getch(); 
      retunr 0; 
    } 

2013610 天氣報告
氣溫:27.3 @ 23:10
相對濕度:百分之83%
天氣:微雨

沒有留言:

張貼留言