刚开始学习C ++几周了,并且正在进行一些练习。虽然我仍然试图返回数组中保存最大数字的数组名称。例如,我为10个人制作了一个阵列,因为我所拥有的每个人都输入了他们吃的煎饼数量,现在我想让那些吃最多煎饼的人回来。只是不知道该怎么做。它在第二个if声明中分崩离析。
int main()
{
int pancakes[9] = {0,0,0,0,0,0,0,0,0};
int max = pancakes[0];
int i;
int p;
for (int x=0; x<=9; x++)
{
cout << "Enter number " << endl;
cin >> i;
pancakes[x] = i;
if(i > max)
max = i;
pancakes[x] = p;
}
cout << endl;
cout << p << " ate the most pcakes @ " << max << endl;
return 0;
}
答案 0 :(得分:0)
你的循环和if语句应该如下。请参阅评论中的详细信息和说明:
for (int x=0; x<9; x++) // You need to exclude 9 (do not use <=) because the index start at 0
{
cout << "Enter number " << endl;
cin >> i;
//pancakes[x] = i; <-- This line and the array is not needed. With this also you actually don't need to
// store/save what people enter. You just need to keep the max and index
if(i > max) // if i (number entered) is bigger than the current max of pancakes
{
max = i; // You update the max to the new number entered (i)
p = x + 1; // you store in p the array index + 1 (your array index start at 0 not 1)
// of the current person who eat the max number of pancakes
}
}
初始化:
//int pancakes[9] = {0,0,0,0,0,0,0,0,0}; <- The array is not needed. See my comment in above code
int max = 0; // More clean and readable
答案 1 :(得分:0)
一些事情:
1)你的迭代是错误的。它应该是:
for (int x = 0; x < 9; ++x)
如果你使用x&lt; = 9,你实际上将完成循环的10次迭代,最后一次迭代将在煎饼阵列的末尾和损坏的内存中运行。
2)当你找到一个新的最大值时,还要设置p等于x来记住谁有最多的煎饼。
3)你将max初始化为pancakes [0]。虽然这实际上会在这个实例中为您提供正确的答案,但您应该明确地初始化max = -1以指示启动时的无效最大值。您还应初始化p = -1以指示启动时无效的食者。这些初始化将允许您在没有输入时区分和处理这种情况。
4)优化:你真的不需要一个阵列来记住每个人吃的煎饼#如果这就是你正在做的事情。您可以根据需要循环读取输入并与最大值进行比较
答案 2 :(得分:0)
我正在打电话,所以如果有格式问题,我会道歉。
你说你的代码在你的第二个if语句中崩溃但是只有一个if语句,所以我假设它是if语句中的第二行。但是,这有两个问题。
这“应该是”: P = X;
你需要在整个语句中加上大括号。例如:
if(i&gt; max){ max = i; P = X; }