整数的奇怪行为

时间:2014-05-02 14:26:26

标签: objective-c

我正在学习如何使用Objective C / C ++(使用Xcode 5)进行编程。我现在有一个关于如何计算矩形区域的基本代码。

int main()
{
    //Step 1. Declare the Variables
    int rectangleWidth, rectangleLength, rectangleArea;

    //Step 2: Initialize The Variables
    rectangleWidth = 4.0;
    rectangleLength = 5.0;

    //Step 3: Calculations
    rectangleArea = rectangleWidth * rectangleLength;
}

当我运行它时,我得到了大量数字:

rectangleLength int 1606422622  1606422622
rectangleWidth  int 32767   32767
rectangleArea   int 32767   32767

任何想法?

2 个答案:

答案 0 :(得分:3)

  

任何想法?

不确定。在某个地方你不恰当地混合类型。这一行有一个例子:

rectangleWidth = 4.0;

在这里,您要为int分配一个浮点数。正如Till在评论中指出的那样,编译器应该通过为您转换值来为您处理。但是,如果你犯了这个错误,你很可能也会在其他地方制作它。你没有解释你是如何查看结果的 - 在调试器中检查它们,将它们打印到控制台等等。你也没有告诉我们你是如何构建这个程序的 - 它是一个真正的iOS应用程序,基于基础的Mac命令行程序等?这些细节至关重要,至少就重复你的确切结果而言。例如,构建为iOS应用程序,我得到以下结果:

rectangleLength = 8.48798e-314
rectangleWidth = -1.99558
rectangleArea = 4.36328e-313

当我使用NSLog()使用以下行显示变量时:

NSLog(@"rectangleLength = %g\nrectangleWidth = %g\nrectangleArea = %g", rectangleLength, rectangleWidth, rectangleArea);

在我们的中,使用%g作为格式说明符是错误的 - 变量的类型为int,所以我应该使用期望该类型的格式说明符。将%g更改为%d会产生正确的结果:

rectangleLength = 5
rectangleWidth = 4
rectangleArea = 20

无论您的计划具体细节如何,这里的课程都是:

  • 请注意您正在使用的类型。
  • 不要不恰当地混合类型。
  • 确保使用正确的类型解释数据。

答案 1 :(得分:0)

实际上,即使Caleb说你应该写

,它也应该有效
rectangleWidth = 4;

代替

或声明

float rectangleWidth, rectangleLength, rectangleArea; 

试试我的代码:(注意:如果您使用的是C,C ++,Objective C或Objective C ++,我没有得到,所以这里有一些C ++代码)

#include<iostream>
int main()                                                                                                                                                                
{
    //Step 1. Declare the Variables
    float rectangleWidth, rectangleLength, rectangleArea;

    //Step 2: Initialize The Variables
    rectangleWidth = 4.0;
    rectangleLength = 5.0;

    //Step 3: Calculations
    rectangleArea = rectangleWidth * rectangleLength;
    std::cout << rectangleArea << std::endl;
}

我认为你的输出系统错了

相关问题