#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的值,那么循环似乎工作正常.问题出在这里?
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次.