需要输入有关多个结构变量的数据(格式 - 一行中3组2个数字)。使用“for”和自定义输入功能(也计算一些参数)。现在尝试使用“std :: cin”:
typedef struct {
short width;
short height;
short left;
short top;
int S;
short orientation;
} Rectangle;
bool input_rectangle(Rectangle* rect) {
short width;
short height;
std::cin >> width >> height;
(*rect).width = width;
(*rect).height = height;
(*rect).S = width * height;
(*rect).top = 0;
(*rect).left = 0;
if(width>height) {
(*rect).orientation = HORIZONTAL;
}
else {
(*rect).orientation = VERTICAL;
}
return width!=0 || height!=0;
}
int main() {
Rectangle* rectangles = new Rectangle[RECTANGLES_COUNT];
...
while(1) {
...
for(int i=0;i<RECTANGLES_COUNT;i++) {
will_continue = will_continue || input_rectangle(&rectangles[i]);
}
if(!will_continue) {
break;
}
else {
int S = calculate(rectangles);
}
...
}
}
它给出了错误的结果。尝试将调试输出添加到“计算”:
for(int i=0;i<RECTANGLES_COUNT;i++)
std::cout << rectangles[i].width << " x " << rectangles[i].height << " = " << rectangles[i].S << "\n";
结果示例。
4 16 6 6 5 10 #my input
4 x 16 = 64 #right
0 x 0 = 0 #??? Must be 6 x 6 = 36
0 x 0 = 0
646 x 6 = 36
0 x 0 = 0
0 x 0 = 0
365 x 10 = 50
0 x 0 = 0
0 x 0 = 0
我该如何改进?我也尝试使用scanf("%hd %hd", &width, &height);
(在这个任务中可能是纯粹的C),但它也给出了相同的结果。
使用g ++编译器/(纯C版本的gcc)
答案 0 :(得分:0)
从您的调试输出代码中,我收集了用于测试目的的RECTANGLES_COUNT实际上定义为3。
此外,因为它能够执行任何类型的计算,并且给出了||运算符需要进行延迟评估,您必须将will_continue
初始化为false
。
当你的第一个输入(i = 0)实际上有效时(即宽度或高度不为0),will_continue
被设置为true
,会发生什么。然后,由于true ||
任何必须为true,因此不再为i=1,2,...
调用input_rectangle(延迟评估),因此在该循环中只设置rectangle[0]
。当您在calculate
中调用调试输出时,将显示所有3个矩形&#39;宽度/高度/ S包括2可能已被初始化为0(并保持其初始值)。
我猜测(虽然没有显示)int S = calculate(rectangles)
实际上可能会分配rectangle[i].S
的总和(恰好等于rectangle[0].S
,因为其他的都是0 )然后打印到S
。这可以解释包含646(64后跟6 x 6)和365(36后跟5 x 5)的行。
我猜你想要的东西可能更像是:
...
while(1) {
...
bool will_continue = false;
for(int i=0;i<RECTANGLES_COUNT;i++) {
will_continue = input_rectangle(&rectangles[i]);
if (!will_continue) {
break;
}
}
if(!will_continue) {
break;
}
else {
int S = calculate(rectangles);
}
...
}
答案 1 :(得分:0)
return width!=0 || height!=0;
应该是
return width!=0 && height!=0;