嘿家伙们想知道你是否可以帮我解决下面这段代码。我的程序正在输出一些奇怪的计算。
#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");
}
答案 0 :(得分:5)
这可能是因为你正在使用:cin.get()。
cin.get()
只从输入流中获取一个字符。
这在实践中意味着如果您在提示符下输入了1
,那么该值将存储为字符,不是作为double值存储(这就是您真正的要)。
并且,如果字符 1
的ASCII表示等于49 in decimal notation,则表示您的输入将解释为{ {1}} - 在语法上正确,但在概念上错误 - 因此您的结果。
您可能希望获得更多 - 您需要正确存储所有输入。因此,在这种情况下,最好使用49
,如下所示:
cin
另外,像这样使用cin >> radius;
的一个可能的警告是,它会自动跳过空格 - 根据其用法,这可能是好的。相对于之前使用的cin
(cin
),可能会导致更多问题,而不是故意或偶然使用空格。因此,在这种情况下,使用上面建议的流来解析输入可能更好。
另一种选择是使用标准C库输入来获取输入(如果你不喜欢处理流 - and there is debate regarding streams usage in C++ vs C-style IO):
答案 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)
在使用之前尝试打印半径值,您将知道
页面上显示读取一个字符并返回(如果有)。否则,返回 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。