我正在学习C ++,并在阅读一本书时看到了这个程序。
#include <stdio.h>
double counter = 50;
int main(){
for(int counter = 1; counter != 10; ++counter){
printf("%d\n",::counter/counter);
}
}
现在,我读了范围解析运算符,我认为这将打印出全局变量计数器除以局部变量计数器。但是,该程序打印出来:
2094374456
4195758
4195758
4195758
4195758
4195758
4195758
4195758
4195758
在这种情况下,这些数字是什么以及范围解析运算符的作用是什么?
免责声明:我不懂C,但我在Java方面有丰富的经验。
答案 0 :(得分:1)
::counter
确实引用了全局变量counter
。这段代码的问题是除法的结果是double
类型,因为其中一个参数是,并且double
值被传递给省略号,其中int
是预期的格式说明符为%d
。这导致未定义的行为。您需要将其更改为%f
。
答案 1 :(得分:1)
您使用了错误的格式说明符。 ::counter
将是全局counter
,其类型为double
,因此除法的结果将为double
类型,并且应通过%f
格式说明符打印或其他要求加倍的说明符,例如%g
。
传递错误类型的数据会在C中调用未定义的行为,但我不确定C ++。
#include <stdio.h>
double counter = 50;
int main(){
for(int counter = 1; counter != 10; ++counter){
printf("%f\n",::counter/counter);
}
}