我想了解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