循环在C ++中再次启动

时间:2015-05-21 07:24:55

标签: c++ loops

#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
     int P[9],temp=0,g;    //temp for highest pancakes, g for person number
     for(int i=0;i<10;i++)
     {
          cout<<"Enter the number of pancakes eaten by person "<<i+1<<" ";
          cin>>P[i];

          if(P[i]>temp)
          {
              temp=P[i];
              g=i+1;
          }
     }

    cout<<"Most pancakes were ate by person "<<g<<endl<<temp;
    return 0;

 }

问题是如果我为最后一个人输入的值小于10,则循环再次开始。 如果我输入P [9] <10,则循环再次运行。就像我输入0煎饼一样,下一个输出线是 - 输入人2吃的煎饼数量

但是如果我输入一个大于10的值,那么循环似乎没问题。问题是什么?

1 个答案:

答案 0 :(得分:6)

int P[9]

定义大小为9的数组,元素为P [0]到P [8]

由于您的循环编码为i < 10,因此输入的最后一个元素是P [9],它不是数组的一部分。这会导致未定义的行为,因此可能会发生任何事情。在这种情况下,编译器很可能将变量i直接放在内存中的数组后面,因此您将最后一个输入值写入i而不是数组。每个平台和编译器都不能保证这一点,但这是您选择的编译器和平台的特定怪癖。

将数组定义更改为

int P[10]

获取10个元素数组

或将您的循环条件更改为

i < 9;

得到一个循环,运行9次。