|
【聲明】本貼當(dāng)前介紹 %d %s %f 的使用方法
我們?cè)诰毩?xí)C語(yǔ)言的時(shí)候使用 printf 來(lái)輸出字符,使用占位符(百度百科稱作 【規(guī)定符】如: %d , %f)來(lái)輸出變量。
在arduino 中 Serial.print 和 Serial.println 無(wú)法像 C語(yǔ)言編譯器中那樣直接使用占位符進(jìn)行輸出。
但是 arduino 可以 使用 sprintf 來(lái)輸出。
舉例:
你想用 Arduino在串行監(jiān)視器上顯示多個(gè)變量,而不必使用一堆單獨(dú)的Serial. print()語(yǔ)句,
如果是這樣,那么使用 sprintf()函數(shù)。
假設(shè)您要將這行文本打印到串行監(jiān)視器:
numBurritos = 3
tempStr = 147.7
“The 3 burritos are 147.7 degrees F”
- Serial.print("The ");
- Serial.print(numBurritos);
- Serial.print(" burritos are "); Serial.print(tempStr);
- Serial.println(" degrees F");
復(fù)制代碼 事實(shí)上,對(duì)于添加到輸出中的每個(gè)變量,您都會(huì)在代碼中添加兩個(gè)串行打印。
如果你想打印一行 多個(gè)變量插入到這樣的字符串中怎么辦就需要長(zhǎng)長(zhǎng)的代碼量。
而使用 sprintf 就可以簡(jiǎn)化,這一輸出。我們可以根據(jù)需要將盡可能多的變量打印到我們的字符串中,所需的代碼量保持在 3 行。
這里你需要的三行代碼:
- char buffer[40];
- sprintf(buffer, "The %d burritos are %s degrees F", numBurritos, tempStr);
- Serial.println(buffer);
復(fù)制代碼 讓我們仔細(xì)看看每一行代碼。
char buffer[40];
字符數(shù)組需要與最終輸出字符串一樣大或更大。因此,計(jì)算你計(jì)劃在該字符串中存儲(chǔ)的字符數(shù),并確保緩沖區(qū)至少有那么大。用于存儲(chǔ)輸出的字符。
sprintf(buffer, "The %d burritos are %s degrees F", numBurritos, tempStr);
sprintf 用于將輸出的字符存儲(chǔ)到 buffer 數(shù)組中
Serial.println(buffer);
打印
我們用一個(gè)程序來(lái)驗(yàn)證一下 使用 %d 使用方法
- void setup() {
- Serial.begin(9600);
- for(int i=0;i<8;i++ ){
- char jinoas[100];
- sprintf(jinoas,"打印 i 的值為:%d , i+1= %d,i+2= %d",i,i+1,i+2);
- Serial.println(jinoas);
- }
- }
- void loop() {
- }
復(fù)制代碼
2.png (49.66 KB, 下載次數(shù): 79)
下載附件
2021-6-27 22:35 上傳
我們用一個(gè)程序來(lái)驗(yàn)證一下 使用 %s 使用方法
- char nun[] = "nufdsfsd";
- void setup() {
- Serial.begin(9600);
- char jinoas[100];
- sprintf(jinoas,"num2的值為%s",nun);
- Serial.println(jinoas);
- }
- void loop() {
- }
復(fù)制代碼
3.png (19.44 KB, 下載次數(shù): 80)
下載附件
2021-6-27 22:35 上傳
使用 %f 使用方法
%f 不能直接 輸出,要先轉(zhuǎn)化為 字符數(shù)組 然后使用 %s 的方式進(jìn)行輸出,使用dtostrf()函數(shù)進(jìn)行轉(zhuǎn)換
我們先看轉(zhuǎn)化程序
- char str_temp[6]; //浮點(diǎn)類型轉(zhuǎn)化存儲(chǔ)緩沖數(shù)組
- dtostrf(num2, 4,2, str_temp); // 4,2 表示轉(zhuǎn)化的精度
復(fù)制代碼
我們用一個(gè)程序來(lái)驗(yàn)證一下
- float num2 = 321.12345;
- void setup() {
- Serial.begin(9600);
- char jinoas[100]; //打印字符緩沖數(shù)組
- char str_temp[6]; //浮點(diǎn)類型轉(zhuǎn)化存儲(chǔ)緩沖數(shù)組
- dtostrf(num2, 4,2, str_temp); // 4,2 表示轉(zhuǎn)化的精度
- sprintf(jinoas,"num2的值為%s",str_temp);
- Serial.println(jinoas);
- }
- void loop() {
- }
復(fù)制代碼
4.png (49.81 KB, 下載次數(shù): 67)
下載附件
2021-6-27 22:36 上傳
以上,就是我關(guān)于 格式化輸出的心得,后期有能力的話,更新其他占位符輸出格式。盡量基于本貼去更新。
覺(jué)得有用,就留個(gè)言吧
|
評(píng)分
-
查看全部評(píng)分
|