循环在C++中再次启动

Div*_*wal 1 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;

 }
Run Code Online (Sandbox Code Playgroud)

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

但是,如果我输入一个大于10的值,那么循环似乎工作正常.问题出在这里?

use*_*353 6

int P[9]
Run Code Online (Sandbox Code Playgroud)

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

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

将数组定义更改为

int P[10]
Run Code Online (Sandbox Code Playgroud)

得到一个10元素的数组

或者将你的循环条件改为

i < 9;
Run Code Online (Sandbox Code Playgroud)

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