-3

我已经编写了这段代码,但是当它要求用户输入一个新数字来创建一个正方形时,它不会打印这个正方形。任何人都可以解释/帮助我吗?

// ask user to repeat the process again at end of the first promt

while ( num > 1 || num < 20 )
    {
  ask user to repeat the process again at end of the first promt
    while ( num > 1 || num < 20 )
    {
        // ask user t enter a square
        cout << "Please enter size of square between #1-20: \n";
        cin >> buf; num = atoi (buf.c_str());
        cin.ignore(1000, 10);


        // process of printing square
        while ( num >= a)
        {
            b = 1;
            while ( num >= b )
            {
                if ( a == 1 || a == num || b == 1 || b == num )
                    cout << "*";
                else
                    cout << " ";
                b++;
            }
            cout << endl;
            a++;
        }
4

2 回答 2

2

我看不到您初始化a为 1 的代码,因此它可能具有一些任意值。如果该任意值大于num,则外循环将永远不会启动。

对于它的价值,我会for在这种情况下使用循环,因为您事先知道限制是什么,类似于以下伪代码:

# Top line
for i = 1 to num (inclusive):
    output "*"
output newline

# Middle lines
for i = 2 to num-1:
    output "*"               # Left char
    for j = 2 to num-1:      # Middle chars
        output " "
    output "*" and newline   # Right char

# Bottom line
for i = 1 to num (inclusive):
    output "*"
output newline

然后您不必担心循环体内的条件检查。

一个好的经验法则是使用for在开始前已知的迭代计数,while用于您事先不知道迭代频率的循环。

另一个可能的问题是您的情况:

while ( num > 1 || num < 20 )

无论 的值如何num,这始终是正确的,因为您使用的是逻辑或||。想想可能性:

num <= 1     : false or true  -> true
num == 2..19 : true  or true  -> true
num >= 20    : true  or false -> true

如果要在值超出范围 1..20 时继续循环,则应使用:

while ( num < 1 || num > 20 )

然后你会得到以下结果:

num <  1     : true  or false -> true
num == 1..20 : false or false -> false
num >  20    : false or true  -> true

您的代码还有很多其他潜在问题:

  • 你似乎有两次外循环。
  • 您似乎没有定义bnum
  • 您似乎没有num在外循环(检查它)之前设置。
  • 我怀疑你的意思是在调用后立即关闭while ( num > 1 || num < 20 )循环,cin.ignore()因为它意味着一直持续到你得到一个从 1 到 20 的值,然后绘制正方形。就目前而言,即使您输入 99,也会绘制一个正方形。
于 2013-08-28T02:33:55.223 回答
0

可能不是最好的代码——但它可以用六行代码完成。开始。

   for (int y = o; y < height; ++ y) {
       for (int x = 0; x < width; ++x) {
          cout << (y == 0 || y == (height - 1) || x == 0 || x == (width - 1) ? '*' : ' ' );
       }
       cout << endl;
    }
于 2013-08-28T04:23:12.210 回答