验证scanf参数

pu82cl6c  于 2023-03-28  发布在  其他
关注(0)|答案(1)|浏览(107)

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

disho6za1#

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()

相关问题