【问题标题】:Continuous for loop doesn't terminate C++连续 for 循环不会终止 C++
【发布时间】:2013-03-22 03:48:28
【问题描述】:

多年来,我一直在努力寻找这个问题,但我似乎无法理解它。 当输入大于 2 的数字时,程序只是连续输出 ' ' 或 '*' 而不会终止,并给出正确的输出。

谁能看到我做错了什么?这是我的代码:

#include <iostream>
#include<cmath>
using namespace std;


int main()
{

     int xx; 

cout << "Enter the Height (odd positive numbers only): " << endl; 
cin >> xx; 

for(float y; y < xx; y++)
{
    for(float x; x < xx; x++)
    {
        x = abs( x - ( xx / 2 ) ); 
        y = abs( y - ( xx / 2 ) );



    if( ( x + y ) <= ( xx / 2 ) )

        cout << '*';
    else
        cout << ' ';
    } 
cout << endl;
} 
return 0;

}

【问题讨论】:

  • UB。 UB。 UB。 UB。表示未定义的行为。 xy 未初始化,您正在阅读它们。
  • for(float y; y &lt; xx; y++) 这里的初始 y 是什么?
  • 对循环索引使用float 类型变量很奇怪。

标签: c++ if-statement for-loop


【解决方案1】:

首先,存在未定义的行为。 xy 需要初始化。

其次,你的xy 永远不会大于xx(如果xx&gt;=2),因为你有:

x = abs( x - ( xx / 2 ) ); 
y = abs( y - ( xx / 2 ) );

因此是无限循环。

【讨论】:

  • 如果xx = 1 他们无论如何都不会增长。
  • 查看括号中的信息:if xx>=2
【解决方案2】:

对于大于等于2 的数字,您的表达式x = abs( x - ( xx / 2 ) ); 导致x 递减。所以无限循环

例如,如果 xx == 2,则 x 对于每个循环都保持不变,因为您在表达式 x = abs( x - 1); 中将 x 值递减 1 并在 for 循环内递增

另外请在for循环中初始化变量

编辑:新设计

int temp1, temp2;
for(float y=0; y < xx; y++)
{
    for(float x=0; x < xx; x++)
    {
       temp1 = abs( x - ( xx / 2 ) ); 
       temp2 = abs( y - ( xx / 2 ) );



    //if( ( abs( x - ( xx / 2 ) ) + abs( y - ( xx / 2 ) ) ) <= ( xx / 2 ) )

    if( ( temp1 + temp2 ) <= ( xx / 2 ) )
        cout << '*';
    else
        cout << ' ';
    }
}

【讨论】:

  • thanks heaps :) 几乎是一个无限循环,因为 x 和 y 在 xpressing x = abs( x - ( xx / 2 ) ); 中递减。有没有另一种表达方式,所以 x 和 y 递增
  • 我认为您可以通过不为 x 和 y 赋值来解决它。检查我的代码
  • 非常感谢,它现在也开始工作了。是不是因为我使用了在 for 循环中初始化的相同值,并且使用 temp 作为单个变量也存储了 x 和 y 的绝对值而不受 for 循环的影响,所以它得到了正确的值?
  • 是的。你说对了。记住初始化循环变量。我修改了我的代码
【解决方案3】:

您必须在此处设置初始 for 循环值。假设您希望他们成为0

for(float y = 0; [...]
{
    for(float x = 0; [...]
    {

否则yx 中使用的值是随机的,取决于它们声明之前所包含的内存。

还有表达式:

    x = abs( x - ( xx / 2 ) ); 
    y = abs( y - ( xx / 2 ) );

输入中的xx 常量将不断递减x 和y(除非xx 为负数或= 0,当xx 小于2 时会发生这种情况)因此导致无限循环。

【讨论】:

  • -1:未定义的行为是正确的。但无限循环条件并不能仅仅通过纠正它来解决。看我的回答。
  • 这不是一个修复,这是这里的实际答案。无论如何,不​​客气。
  • 非常感谢,如果我有任何问题,我会再次评论 :) 我刚开始学习 c++,所以它对我来说有点新
  • if xx = 8. 这是否意味着 for 循环中的 x 和 y 会递增,直到达到小于 8 的 7。所以 x = abs(7 - (8/ 2))哪个= 3?这对 y 是一样的。那么 if((3+3)
猜你喜欢
  • 1970-01-01
  • 2018-10-02
  • 1970-01-01
  • 2011-11-02
  • 1970-01-01
  • 2018-12-18
  • 2016-02-20
  • 2013-03-25
  • 1970-01-01
相关资源
最近更新 更多