這個程序:
#include <stdio.h>
int main(void)
{
const char hhmmss[] = "10:32:54";
int hh, mm, ss;
if (sscanf(hhmmss, "%i:%i:%i", &hh, &mm, &ss) != 3)
printf("Failed to scan 3 values from '%s'\n", hhmmss);
else
printf("From <<%s>> hh = %d, mm = %d, ss = %d\n", hhmmss, hh, mm, ss);
return 0;
}
給出了這樣的輸出:
From <<10:32:54>> hh = 10, mm = 32, ss = 54
的%02i
轉換應該工作,但數字是有點畫蛇添足。
修訂後的問題表明變量是uint8_t
型的,在這種情況下,你必須使用正確的轉換說明從<inttypes.h>
:
#include <stdio.h>
#include <inttypes.h>
int main(void)
{
const char hhmmss[] = "10:32:54";
uint8_t s;
uint8_t m;
uint8_t h;
if (sscanf(hhmmss, "%02" SCNi8 ":%02" SCNi8 ":%02" SCNi8, &h, &m, &s) != 3)
printf("Failed to scan 3 values from '%s'\n", hhmmss);
else
printf("From <<%s>> h = %d, m = %d, s = %d\n", hhmmss, h, m, s);
return 0;
}
這像以前一樣產生相同的輸出。使用scanf()
函數系列中的任何一種,格式轉換說明符與您傳遞給函數的指針類型相匹配至關重要。 printf()
- 當然相比 - 你可以逃脫很多不匹配 - 因爲默認整數(尤其是)促銷,但scanf()
是寬容少得多。
我們可以看看你如何聲明並初始化h,m和s嗎? – Lefteris 2012-02-12 05:50:44