2013-07-25 112 views
-2

嘿家伙想知道你是否可以帮助我下面的这段代码。我的程序正在输出一些奇怪的计算结果。C++算术运算符错误

#include <iostream> 

using namespace std; 

int main() 

{  

    int radius; 
    const double PI = 3.14159265; 
    float area; 
    float circumference; 


    cout << "Program to find the area and circumference of a circle\n\n\n"; 
    cout << "Please enter the radius: "; 
    radius = cin.get(); 

    area = PI * (radius * radius); 
    circumference = (2 * radius) * PI; 

    cout << "The area of your circle is " << area << ", the circumference of your circle is " << circumference <<"\n\n"; 
    system("PAUSE"); 

} 
+4

对于某些示例输入,您希望输出什么,以及它实际输出的是什么? – BoBTFish

+0

什么是'cin.get()'?为什么不使用流转换'radius << cin;'? – wallyk

+0

你会得到什么? – Engine

回答

5

这可能是因为您正在使用:cin.get()

cin.get()只从输入流中获取一个字符。

这意味着在实践中,如果你已在提示符下输入1,该值将存储为一个字符和一个双值(这是你真正想要的)。

而且,鉴于字符1等于49 in decimal notation ASCII表示,这意味着你的投入将解释49 - 这是语法正确,但概念错误 - 因此你的结果。

很可能你会想要更多 - 你会希望你的所有输入被正确存储。因此,在这种情况下,最好使用cin如下:

cin >> radius; 

此外,中cin这样使用的可能需要注意的是,它会自动跳过空白 - 这可以说是很好的根据其使用情况。相对于之前使用的cincin.get()),可能会导致比有意或无意间使用空格的值更多的问题。因此,在这种情况下,使用上面提出的流来解析输入可能更好。

另一种选择是使用标准C库输入以获取输入(如果你不喜欢处理流 - and there is debate regarding streams usage in C++ vs C-style IO):

http://www.cplusplus.com/reference/cstdio/scanf/

0

cin.get()返回一个字符,当将其转换为double,radius将得到错误的值。如

cin >> radius; 
0

istream::get功能提取字符而不是数量,应使用流转换。对于大多数平台,这意味着如果您输入5,您将分配53radius as that is the [ASCII](http://www.asciitable.com/) value of'5'`。

使用正常的输入操作>>阅读次数,它会做正确的事情不管radius为整数或浮点数变量:

cin >> radius; 
0

尝试使用它之前打印您的半径值,你就会知道

cin.get();作为页面说,

读取一个字符并返回它(如果可用)。否则,返回 Traits :: eof()并设置failbit和eofbit。

您在控制台上键入的数字被视为字符并使用其ASCII值。

您需要使用cin>>radius这个

0

想尽计算后打印出来,你会得到什么,也错误可能是原因:

radius = cin.get(); 
//Use cin or scanf instead 
cin >> radius; 
scanf("%d",&radius); 

或者因为面积和回旋的(浮动)和接收在线路值类型(双):

area = PI * (radius * radius); 
circumference = (2 * radius) * PI; 

我建议任一铸造,或使每一个变量类型浮子,如的sizeof(浮点)=的sizeof(int)的= 4字节。