【问题标题】:type conversion data printing Error in C langC 语言中的类型转换数据打印错误
【发布时间】:2019-02-12 06:04:36
【问题描述】:

在 C 中

int n=100;
printf("%d", (int)(sqrt((double)n)));

当我使用此代码时,它会打印正确答案 (10)。

但下面的代码总是打印 0

int n; 
int max = (int)(sqrt((double)n));
printf("%d", max);

为什么答案不一样?

【问题讨论】:

  • n 将具有不确定的价值,除了要打印之外你还有什么?

标签: c type-conversion


【解决方案1】:
int n=100;
printf("%d", (int)(sqrt((double)n)));

在这种情况下,n 的值是已知的,即 100。所以sqrt((double)n) 返回正确的值。

int n; 
int max = (int)(sqrt((double)n));
printf("%d", max);

这里,变量 n 未初始化。变量可能持有一个不确定的值,具体取决于它是在本地(在块内,在这种情况下 n 的值将是垃圾值)还是在全局(在块外,在这种情况下 n 的值为零)声明)。始终初始化变量以避免此类错误。

【讨论】:

  • 小记:“在块内,这种情况下n的值就是垃圾值” 因为n有自动存储时长,它的地址永远不会采取,更可能是未定义的行为(C17 §6.3.2.1 p2),在这种情况下导致垃圾值。但无论如何,你的建议是正确的。
  • @user694733 是的。这就是我真正的意思。感谢您的意见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多