我需要帮助找到我拥有的无限循环

时间:2015-01-26 03:58:41

标签: c++ loops

无法找到循环的位置,有人可以帮助找到它

在我看来,所有的循环都关闭了。

我应该使用for循环打印出一个垂直条形图,但它似乎是循环的

#include <iostream>
using namespace std;

int main()
{
    const int MAX=100;
    int array[MAX];
    int highest=0;

    for (int counter=0; counter<MAX; counter++) {

        cin>>array[counter];

        if(array[counter]==0){

            for (int check=0; check<=counter; check++) {
                if(array[check]>highest)
                    highest=array[check];
            }

            for (int rows=highest;rows>=1;rows--) {
                for (int cols=0; cols<=26; cols++) {
                    if (array[cols]>=rows)
                        cout<<"* ";
                    else
                        cout<<"  ";
                }
                cout<<endl;
            }
        }
    }
    return 0;
}

3 个答案:

答案 0 :(得分:1)

有几个地方您正在使用未初始化的值。

  1. 更改

    int highest = array[0]; // array[0] is uninitialized
    
  2.     int highest = 0;
    
    1. 更改

          for(int find = 0;find<=25;find++) // Not all elements of
                                            // array have been initialized.
      
    2.         for(int find = 0;find<=counter;find++)
      

      我无法保证代码中其他部分的逻辑有效性。

答案 1 :(得分:1)

您的代码中存在错误:

  • 您使用不确定的值初始化highest
  • 仅当有人输入0时才会输出您的输出分支,而不是有人输入25个实际数字。
  • 您从未验证任何指定值的输入 成功
  • 输出循环的限制是错误的。如果输入循环过早地以array[]输入值终止,您可以(并且将会)评估0中的内容是不确定的。
  • i < 1循环完全没必要。
  • 在输入期间可以/应该>计算highest;它不需要在之后完成。
  • 您应该使用无符号值。这些都不允许输入负数。

考虑上述所有因素。

#include <iostream>

int main()
{
    unsigned int arr[25] = {0}, highest=0;
    int len = 0;

    for (; len < 25 && std::cin >> arr[len] && arr[len] > 0; ++len)
    {
        if (highest < arr[len])
            highest = arr[len];
    }

    while (highest--)
    {
        for (int i=0; i<len; ++i)
            std::cout << ((highest < arr[i]) ? '*' : ' ') << ' ';
        std::cout << '\n';
    }
}

<强>输入

12 5 7 11 6 9 4 8 10 2 0

<强>输出

*                   
*     *             
*     *         *   
*     *   *     *   
*     *   *   * *   
*   * *   *   * *   
*   * * * *   * *   
* * * * * *   * *   
* * * * * * * * *   
* * * * * * * * *   
* * * * * * * * * * 
* * * * * * * * * * 

祝你好运。

答案 2 :(得分:0)

以下是更正后的计划:

  1. 我声明了一个宏 MAX 来将数字设置为25,这样我就可以了 可以用较少的数字进行调试。
  2. 在&lt; = 25中删除了相等的大小写,因为它未被输入 用户
  3. 为了清晰起见,我已经使用全0来初始化数组,因为我们不想要 用垃圾值检查

  4. #include <iostream>
    #define MAX 25
    using namespace std;
    
    int main()  {
    
        int array[100] = {0,};
        int highest = array[0];
        for (int counter = 0; counter < MAX; counter++){
            cin >> array[counter];
            if (array[counter] == 0){
                for (int i = 0; i <1; i++){
                    for (int find = 0; find < MAX; find++){
                        if (array[find]>highest){
                            highest = array[find];
                        }
                    }
                    for (int rows = highest; rows >= 1; rows--){
                        for (int cols = 0; cols < MAX; cols++){
                            if (array[cols] >= rows){
                                cout << "* ";
                            }
                            else{
                                cout << "  ";
                            }
                        }
                        cout << endl;
                    }
                }
            }
        }
        for (int counter = 0; counter < MAX; counter++){
            cout << array[counter] << endl;
        }
        getchar();
        return 0;
    }
    

    此程序无法像您声称的那样无限运行。它运作良好。 :)