为什么这会一直打印圆的宽度?
Why does this print the width all the time for the circle?
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
const double PI = 3.141592653589793238463;
enum Figur {DREIECK, RECHTECK, KREIS};
struct Geo {
mutable Figur figur;
mutable double a, b, c;
};
Geo createGeo(Figur f, double a, double b, double c)
{
Geo d;
d.figur = f;
d.a = a;
d.b = b;
d.c = c;
return d;
}
Geo getGeo() {
double a=0.0, b=0.0, c=0.0;
n:
cout << "Please insert which geometrical object you want to create:" << endl;
cout << "0 for triangle" << endl << "1 for rectangle" << endl << "2 for circle" << endl;
Figur f;
int p = 3;
cin >> p;
if (p == 0)
{
f = DREIECK;
cout << "Please insert the length: ";
cin >> a;
cout << endl << "Please insert the width: ";
cin >> b;
{ m:
cout << endl << "Please set the angle >0 and <180°: ";
cin >> c;
if (c <= 0 || c >= 180)
{
cout << endl << "Invalid value! Please try again" << endl;
goto m;
}
}
cout << endl << "Your figure is now going to be created" << endl;
Geo geo = createGeo(f, a, b, c);
return geo;
}
else if (p == 1)
{
f = RECHTECK;
cout << "Please insert the length: ";
cin >> a;
cout << endl << "Please insert the width: ";
cin >> b;
cout << endl << "Your figure is now going to be created" << endl;
Geo geo = createGeo(f, a, b ,0);
return geo;
}
else if (p == 2)
{
f = KREIS;
cout << "Please insert the radius: ";
cin >> a;
cout << endl << "Your figure is now going to be created" << endl;
Geo geo = createGeo(f, a,0,0);
return geo;
}
else
{
cout << "Invalid value. Please try again." << endl;
goto n;
}
}
double flaeche(Geo const &g)
{
double flaeche;
if(g.figur = DREIECK)
{
flaeche = 0.5 * g.a*g.b;
}
else if (g.figur = RECHTECK)
{
flaeche = g.a*g.b;
}
else if(g.figur = KREIS)
{
flaeche = PI * pow(g.a, 2);
}
return flaeche;
}
void putGeo(double a, Geo &g)
{
string typ;
if (g.figur == DREIECK) typ = "triangle";
else if (g.figur == RECHTECK) typ = "rectangle";
else typ = "circle";
cout << "Type of figure: " << typ << endl;
if (g.figur == DREIECK) {
cout << "Length: " << g.a << endl;
cout << "Height: " << g.b << endl;
cout << "Angle: " << g.a << endl;
cout << "Area: " << a << endl;
}
else if (g.figur == RECHTECK) {
cout << "Length: " << g.a << endl;
cout << "Width: " << g.b << endl;
cout << "Area: " << a << endl;
}
else if(g.figur == KREIS){
cout << "Radius: " << g.a << endl;
cout << "Area: " << a << endl;
}
}
int main()
{
Geo g1 = getGeo();
double a = flaeche(g1);
putGeo(a, g1);
return 0;
}
您好,
希望此代码示例易于您理解。
我想创建一个程序,用户必须在其中通过控制台创建一个几何对象。
目前矩形和三角形的效果很好,但是圆形有点问题。
每次当我创建一个圆并调用 putGeo() 方法时,宽度也会被打印出来,面积被计算为零。
有人可能知道为什么会这样吗?
这是我课程中的一个练习,现在我真的不知道了。
程序完全是德语,但我翻译了输出。对于枚举 DREIECK 是三角形,RECHTECK 是矩形,KREIS 是圆形。
感谢您的帮助。
编辑输出问题
如果我创建半径为 5 的圆
我想通过 putGeo() 进行打印
半径:5
地区:78.5398163397
但我实际上得到了
半径:5
宽度:0
面积:0
看这里:
if(g.figur = DREIECK)
您打算进行 测试, 但这是一个 作业。 这会将 g.figur
的值设置为 DREIECK
.之后,面积会计算错误。
当您以这种方式使用赋值时,一个好的编译器会警告您。 (如果抑制或忽略编译器警告,会给自己带来麻烦。)
正确的形式是
if(g.figur == DREIECK)
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
const double PI = 3.141592653589793238463;
enum Figur {DREIECK, RECHTECK, KREIS};
struct Geo {
mutable Figur figur;
mutable double a, b, c;
};
Geo createGeo(Figur f, double a, double b, double c)
{
Geo d;
d.figur = f;
d.a = a;
d.b = b;
d.c = c;
return d;
}
Geo getGeo() {
double a=0.0, b=0.0, c=0.0;
n:
cout << "Please insert which geometrical object you want to create:" << endl;
cout << "0 for triangle" << endl << "1 for rectangle" << endl << "2 for circle" << endl;
Figur f;
int p = 3;
cin >> p;
if (p == 0)
{
f = DREIECK;
cout << "Please insert the length: ";
cin >> a;
cout << endl << "Please insert the width: ";
cin >> b;
{ m:
cout << endl << "Please set the angle >0 and <180°: ";
cin >> c;
if (c <= 0 || c >= 180)
{
cout << endl << "Invalid value! Please try again" << endl;
goto m;
}
}
cout << endl << "Your figure is now going to be created" << endl;
Geo geo = createGeo(f, a, b, c);
return geo;
}
else if (p == 1)
{
f = RECHTECK;
cout << "Please insert the length: ";
cin >> a;
cout << endl << "Please insert the width: ";
cin >> b;
cout << endl << "Your figure is now going to be created" << endl;
Geo geo = createGeo(f, a, b ,0);
return geo;
}
else if (p == 2)
{
f = KREIS;
cout << "Please insert the radius: ";
cin >> a;
cout << endl << "Your figure is now going to be created" << endl;
Geo geo = createGeo(f, a,0,0);
return geo;
}
else
{
cout << "Invalid value. Please try again." << endl;
goto n;
}
}
double flaeche(Geo const &g)
{
double flaeche;
if(g.figur = DREIECK)
{
flaeche = 0.5 * g.a*g.b;
}
else if (g.figur = RECHTECK)
{
flaeche = g.a*g.b;
}
else if(g.figur = KREIS)
{
flaeche = PI * pow(g.a, 2);
}
return flaeche;
}
void putGeo(double a, Geo &g)
{
string typ;
if (g.figur == DREIECK) typ = "triangle";
else if (g.figur == RECHTECK) typ = "rectangle";
else typ = "circle";
cout << "Type of figure: " << typ << endl;
if (g.figur == DREIECK) {
cout << "Length: " << g.a << endl;
cout << "Height: " << g.b << endl;
cout << "Angle: " << g.a << endl;
cout << "Area: " << a << endl;
}
else if (g.figur == RECHTECK) {
cout << "Length: " << g.a << endl;
cout << "Width: " << g.b << endl;
cout << "Area: " << a << endl;
}
else if(g.figur == KREIS){
cout << "Radius: " << g.a << endl;
cout << "Area: " << a << endl;
}
}
int main()
{
Geo g1 = getGeo();
double a = flaeche(g1);
putGeo(a, g1);
return 0;
}
您好,
希望此代码示例易于您理解。 我想创建一个程序,用户必须在其中通过控制台创建一个几何对象。
目前矩形和三角形的效果很好,但是圆形有点问题。
每次当我创建一个圆并调用 putGeo() 方法时,宽度也会被打印出来,面积被计算为零。
有人可能知道为什么会这样吗?
这是我课程中的一个练习,现在我真的不知道了。
程序完全是德语,但我翻译了输出。对于枚举 DREIECK 是三角形,RECHTECK 是矩形,KREIS 是圆形。
感谢您的帮助。
编辑输出问题
如果我创建半径为 5 的圆
我想通过 putGeo() 进行打印
半径:5 地区:78.5398163397
但我实际上得到了
半径:5 宽度:0 面积:0
看这里:
if(g.figur = DREIECK)
您打算进行 测试, 但这是一个 作业。 这会将 g.figur
的值设置为 DREIECK
.之后,面积会计算错误。
当您以这种方式使用赋值时,一个好的编译器会警告您。 (如果抑制或忽略编译器警告,会给自己带来麻烦。)
正确的形式是
if(g.figur == DREIECK)