C ++算术运算符错误

时间:2013-07-25 08:36:33

标签: c++ operators user-input iostream

嘿家伙们想知道你是否可以帮我解决下面这段代码。我的程序正在输出一些奇怪的计算。

#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");

}

5 个答案:

答案 0 :(得分:5)

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

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

这在实践中意味着如果您在提示符下输入了1,那么该值将存储为字符,不是作为double值存储(这就是您真正的要)。

并且,如果字符 1的ASCII表示等于49 in decimal notation,则表示您的输入将解释为{ {1}} - 在语法上正确,但在概念上错误 - 因此您的结果。

您可能希望获得更多 - 您需要正确存储所有输入。因此,在这种情况下,最好使用49,如下所示:

cin

另外,像这样使用cin >> radius; 的一个可能的警告是,它会自动跳过空格 - 根据其用法,这可能是好的。相对于之前使用的cincin),可能会导致更多问题,而不是故意或偶然使用空格。因此,在这种情况下,使用上面建议的流来解析输入可能更好。

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

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

答案 1 :(得分:0)

cin.get()返回一个字符,当转换为double时,radius将得到错误的值。您应该使用流转换,例如

cin >> radius;

答案 2 :(得分:0)

istream::get函数提取字符而不是数字。对于大多数平台而言,如果您输入5,则会将53分配给radius as that is the [ASCII](http://www.asciitable.com/) value of'5'。

使用普通输入运算符>>来读取数字,无论radius是整数还是浮点变量,它都会做正确的事情:

cin >> radius;

答案 3 :(得分:0)

在使用之前尝试打印半径值,您将知道

页面上显示

cin.get();

  

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

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

您需要cin>>radius用于此

答案 4 :(得分:0)

尝试打印出每次计算后得到的内容,也可能导致以下错误:

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

或者因为area和circumflex是(float)并且在行处接收值类型(double):

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

我建议使用cast或使每个变量类型为float,因为sizeof(float)= sizeof(int)= 4 bytes。