2014-05-06 85 views
2

我需要驗證scanf函數參數 例如驗證scanf函數參數

if (scanf("%c,%f,%f", &ch, &p1, &p2) != 3) 
// How can I tell which parameter failed? 
// If I want to output message such as "Second parameter must be a real nubmer". 

回答

4

scanf將盡快第一個遇到的符號不匹配的格式說明符停止掃描。所以如果你的scanf返回1,那麼只解釋第一個格式參數。

switch (scanf("%c,%f,%f", &ch, &p1, &p2)) { 
    case 0: 
    // no parameters were parsed successfully 
    case 1: 
    // only first parameter succeeded 
    case 2: 
    // only the first two parameters succeeded 
    case 3: 
    // all three parameter succeeded 
    default: 
    // error 
} 

另請注意,小於最大成功解析數的返回值也可能表示出現錯誤。在這種情況下,您應該諮詢ferror()