【发布时间】:2014-04-25 17:44:24
【问题描述】:
我正在尝试了解 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的返回值。如果它不等于您使用的占位符的数量,那么您会意识到发生了一些错误。 -
阅读
scanf的文档或手册页,不要假设... 这一系列的文本解析函数具有很大的功能,但我会说功能带来的责任比它更大值得,更不用说从用户的角度来看默认值可能不直观。通常最好用标准 Cfgets或 GNU/POSIX2008getline读取一行,然后用sscanf解析。