for循环的问题

时间:2012-12-02 06:21:49

标签: c for-loop cs50

我编译了这个程序,它正在接受输入,但在输入值后立即中止。我对C很陌生,所以任何帮助都会受到赞赏,谢谢。

#include <stdio.h>
#include <cs50.h>

int main(void) 
{ 
  int height = 0;

  do 
  { 
    printf("Enter a positie integer no larger than 23: "); 
    height = GetInt();
  } while (height <= 0 || height > 23) ;

  int space = height - 1, hash = 2, counter_1;

  for (counter_1 = 1; counter_1 == height; counter_1++, hash++, space--)
  {

    int counter_2;
    for (counter_2 = 0; counter_2 == space; counter_2++) 
      printf(" ") ;

    int counter_3;
    for (counter_3 = 0; counter_2 == hash; counter_3++) 
      printf("#");

    printf("\n");

  } 
  return 0;
}

5 个答案:

答案 0 :(得分:2)

表达式counter1 == height将始终为false(除非用户将高度输入为1),因此for循环将永远不会运行。

您的意思是counter1 <= height吗?

for (counter_1 = 1; counter_1 <= height; counter_1++, hash++, space--) {
//                  ^^^^^^^^^^^^^^^^^^^

您可能还想从零开始计数器并改为使用counter1 < height

for (counter_1 = 0; counter_1 < height; counter_1++, hash++, space--) {

答案 1 :(得分:1)

您正在测试相等性(counter_1 == height等),这意味着您执行循环counter_1 == height

您需要执行直到 counter_1 == height,或者换句话说 - counter_1 < height

答案 2 :(得分:0)

你检查for循环中的条件是否失败(如果你没有输入1),这就是为什么它退出for循环。在for循环之后,程序结束,因为只有外部for循环成功时才会执行其他for循环。 这就是为什么要进入外部for循环,你必须将你的条件改为counter_1 < height

答案 3 :(得分:0)

您必须替换==循环中的!=。所以第一个循环将执行到counter_1 != height,第二个循环将执行到counter_2 != space,最后第三个循环将从此更改:

for (counter_3 = 0; counter_2 == hash; counter_3++) 

for (counter_3 = 0; counter_3 != hash; counter_3++) 

我认为您的意思是counter_3 != hash而不是counter_2 == hash

答案 4 :(得分:0)

您有两个错误:

  1. 您需要使用==for
  2. 替换所有<圈中的<=
  3. 在第二个内部循环中,您需要将counter_2替换为counter_3