验证scanf参数

时间:2014-05-06 14:25:19

标签: c ansi

我需要验证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".

1 个答案:

答案 0 :(得分: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()

相关问题