猜猜这个程序会输出什么?
# include <iostream>
# include <cmath>
# include <cstdio>
using namespace std;
int main() {
printf("%d ",abs(-2));
}
一开始很不理解,后来查了下abs函数的定义
在 cmath 中只有:
double abs (double x); float abs (float x); long double abs (long double x);
所以abs(-2) 的返回值是浮点数 -2.0,用printf 输出成整数就是这个结果
解决办法有三种:
1. 强制转换
printf("%d", (int)abs(-2));
2. 使用C++的输出
cout << abs(-2) << endl;
3. 引用 cstdlib 头文件
因为在 cstdlib 里面有:
int abs ( int n); long int abs (long int n);
OK