我想了解sscanf
行爲,因爲我已經執行了兩個程序。C sscanf行爲
void main()
{
char *a = "225.311";
int x = 0, y = 0;
sscanf(a, "%d.3%d", &x, &y);
printf("x is %d, y is %d\n", x, y);
}
輸出
x is 255, y is 11
下面程序工作不按我的期望。
void main()
{
char *a = "225.311";
int x = 0, y = 0;
sscanf(a, "%d5.3%d", &x, &y);
printf("x is %d, y is %d\n", x, y);
}
我期待25,11
,但輸出
x is 255, y is 0
我期待sscanf
行爲應該完全一樣在相反的方式sprintf的。但它沒有在我的第二個程序中工作。如果格式指定爲%d5.3%d
,則必須將5
視爲分隔符。但它不考慮和讀取x
的所有數字,然後點與5.3%d
不匹配,因此它在那裏退出。
有人可以解釋一下。
總是檢查'[s] scanf'的返回值。如果它不等於你使用的佔位符的數量,那麼你會意識到發生了一些錯誤。 – Crozin
閱讀'scanf'的文檔或手冊頁,不要假設...這個文本解析函數族具有很大的權力,但我會說權力比責任更重要,更不用說默認值了從用戶的角度來看可能是不直觀的。用標準的C'fgets'或者GNU/POSIX2008'getline'讀一行,然後用'sscanf'解析通常會更好。 – hyde