2015-02-14 5 views
0

Только что начал изучать 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

Вам не хватает скобок вокруг кода под вашей линией 'if (i> max). Также я думаю, что вы хотите 'p = x' вместо' pancakes [x] = p'. – sje397

+0

Что вы хотите представлять 'p'? – MarkG

+0

Да, я знаю о скобках с if, все еще не работает с ними ...но я хочу, чтобы p представлял массив, который держит человека, который съел самые блины. поэтому, если человек 5, который блины [5], входил в 100 блинов, он ел. Я хочу, чтобы p представлял блин [5], а не элемент, который он удерживал. –

ответ

0

Ваша формулировка цикла и, если утверждение должно быть следующим. Смотрите подробности и пояснения в комментариях:

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 
+0

Все еще немного запутался .. Так что нет способа вывода, можно сказать, что блины [5] съели самые блины. Я могу только удерживать значение блинчика [5] и выводить его? из того, что я понимаю, p только держит значение x, которое на самом деле не блин [5], я думаю, мне просто нужно прочитать ваш пост пару раз. Спасибо за быстрые ответы, хотя вы, ребята, рок! –

+0

@MarkCastilla Если блинчик [5] является максимальным, и вы устанавливаете p = x, когда вы его обнаруживаете (т. Е. Внутри оператора if, который обновляет max), тогда p = 5. Когда вы отправляетесь распечатывать, кто ел больше всего, вы можете do: cout << "Eater #" << p + 1 << "ate" << max << "блины, что было самым большим!" << endl; – jschultz410

+0

Я вижу сейчас. Я старался, чтобы он выдавал просто блин [5] сам по себе, как cout << p << съел самые блины. Но я думаю, что это невозможно, что означает, что мне нужно будет сделать то, что вы описали выше. Спасибо чувак! Очки для всех !!! –

0

Несколько вещей:

1) Ваша итерация неправильно. Оно должно быть:

for (int x = 0; x < 9; ++x) 

Если вы используете х < = 9 вы на самом деле 10 итераций цикла и последней итерации будет работать с конца массива блинов и повреждение памяти.

2) Когда вы найдете новый макс, также установите p равным x, чтобы запомнить, у кого были самые блины.

3) Вы инициализируете максимальные блины [0]. Хотя это фактически даст вам правильный ответ в этом случае, вы должны явно инициализировать max = -1, чтобы указать недопустимый максимум при запуске. Вы также должны инициализировать p = -1, чтобы указать недопустимый eater, когда вы начинаете. Эти инициализации позволят вам различать и обрабатывать случай, когда нет ввода.

4) Оптимизация: вам действительно не нужен массив, чтобы помнить о количестве блинов, которые каждый человек ел, если это все, что вы делаете. Вы можете просто зацикливать столько раз, сколько хотите чтение ввода и сравнить с макс.

0

Я нахожусь на своем телефоне, поэтому я извиняюсь, если есть проблемы с форматированием.

Вы говорите, что ваш код разваливается на ваш второй оператор if, но есть только один оператор if, поэтому я предполагаю, что это вторая строка в if-statement. Однако есть две проблемы с этим.

  1. Вы не записываете человека надлежащим образом: блины [x] = p;

Это должно быть: p = x;

  1. Вам нужно поместить фигурные скобки вокруг всего заявления. Например:

    if (i> max) { max = i; p = x; } }

Смежные вопросы