2014-10-16 8 views
0

Я пытаюсь выполнить часть моей домашней работы на C++, но, похоже, я столкнулся с проблемой. Мне нужно сделать так, чтобы пользователь вводил 8 чисел, а те, что сказали 8, сохранялись в массиве. Затем, если одно из чисел больше 21, чтобы вывести указанное число. Код ниже, и это немного небрежно. Да, первый год, C++ обучающийся здесь: рПечать массива в C++

#include <iostream> 
    using namespace std; 

    int main() { 
    const int NUM_ELEMENTS = 8; // Number of elements 
    int userVals[NUM_ELEMENTS]; // User numbers 
    int i = 0;     // Loop index 
    int sumVal = 0;    // For computing sum 
    int prntSel = 0;   // For printing greater than 21 

    // Prompt user to populate array 
    cout << "Enter " << NUM_ELEMENTS << " integer values..." << endl; 


    for (i = 0; i < NUM_ELEMENTS; ++i) { 
    cin >> userVals[i]; 
    } 

    for (int i = NUM_ELEMENTS - 1; i > 21; i--) 
    cout << "Value: " << sumVal << endl; 

    // Determine sum 
    sumVal = 0; 

    for (i = 0; i < NUM_ELEMENTS; ++i) { 
    sumVal = sumVal + userVals[i]; 
    } 

    cout << "Sum: " << sumVal << endl; 

    return 0; 
} 
+6

В каком виде это не работает? – Overv

+2

Не помещайте C для вопроса C++, особенно когда вы изучаете язык (если вы действительно не знаете C). Современные версии языков разные, и вы должны изучать «естественный» C++ способ делать что-то. – crashmstr

+0

@Overv Это просто вывод 0, который я установил, когда я объявил его переменной. – 3ncrypt3d

ответ

0

Попробуйте

for (int i = NUM_ELEMENTS - 1; i > 21; i--) 
    cout << "Value: " << sumVal << endl; 

к

for (i = 0; i < NUM_ELEMENTS; ++i) { 

    if(userVals[i] > 21) 
     cout << "Value: " << userVals[i] << endl; 
} 

Этой линии Isnt необходимого, а также, как вы Арент его использованию.

int prntSel = 0;   // For printing greater than 21 
+0

Пробовал делать это, и значение по-прежнему установлено на ноль. Я снова включу ссылку и код. [link] (http://gyazo.com/e0de35eedfa813a2ff7fc27efa8460bf) [ссылка] (http://gyazo.com/3ae43b5c5f2023c7490d129caffc145a) – 3ncrypt3d

+0

Попробуйте сейчас, небольшая редакция. – marsh

+0

Это похоже работа. Если бы вы могли сказать мне, что я делаю неправильно, это было бы очень полезно :) – 3ncrypt3d

3

Не изобретайте колесо, use standard algorithms:

std::copy_if(std::begin(userVals), std::end(userVals), 
      std::ostream_iterator<int>(std::cout, "\n"), 
      [] (auto x) { return x > 21; }); 

Я улучшил остальную часть вашей программы, а также:

#include <algorithm> 
#include <iostream> 
#include <iterator> 
#include <numeric> 
#include <vector> 

auto constexpr count = 8; 

int main() { 
    std::vector<int> numbers(count); 

    std::cout << "Enter " << count << " integer values...\n"; 
    std::copy_n(std::istream_iterator<int>(std::cin), numbers.size(), numbers.begin()); 

    std::copy_if(numbers.begin(), numbers.end(), 
       std::ostream_iterator<int>(std::cout, "\n"), 
       [] (auto x) { return x > 21; }); 

    auto sum = std::accumulate(numbers.begin(), numbers.end(), 0); 
    std::cout << "Sum: " << sum << '\n'; 

    return 0; 
} 

видеть это live on Coliru!

+2

+1 Ваш подход возвышен, но если бы я был его профессором, то я подумал бы, что он обманывает! – Raptor

0
#include <iostream> 
    using namespace std; 

    int main() { 
    const int NUM_ELEMENTS = 8; // Number of elements 
    int userVals[NUM_ELEMENTS]; // User numbers 
    int i = 0;     // Loop index 
    int sumVal = 0;    // For computing sum 
    int prntSel = 0;   // For printing greater than 21 

    // Prompt user to populate array 
    cout << "Enter " << NUM_ELEMENTS << " integer values..." << endl; 


    for (i = 0; i < NUM_ELEMENTS; ++i) { 
    cin >> userVals[i]; 
    } 

// for (int i = NUM_ELEMENTS - 1; i > 21; i--) 
//  cout << "Value: " << sumVal << endl; 

    for(i = 0; i < NUM_ELEMENTS; ++i) 
    { 
     if(userVals[ i ] > 21) 
     { 
      cout << "Value: " << i << " is " << userVals[ i ] << endl; 
     } 
    } 

    for (i = 0; i < NUM_ELEMENTS; ++i) { 
    sumVal = sumVal + userVals[i]; 
    } 

    cout << "Sum: " << sumVal << endl; 

    return 0; 
} 
0
for (int i = NUM_ELEMENTS - 1; i > 21; i--) 
    cout << "Value: " << sumVal << endl; 

Здесь вы печатаете значение sumVal, а не значение массива в положении i. Линия должна быть:

cout << "Value: " << usersVals[i] << endl; 

Кроме того, что это ваш for не делать то, что вы думаете, что он делает. for не использует условие, которое вы дали, чтобы решить, будет ли выполняться текущая итерация или нет, оно использует условие, чтобы решить, должен ли цикл продолжать или нет. Поэтому, когда вы ставите i > 21, это означает, что он будет продолжать работать, пока i больше 21. Чтобы достичь своей цели, вы должны сделать тест (if) внутри цикла.

Окончательный результат это будет:

for (i = 0; i < NUM_ELEMENTS; ++i) { 
    if (usersVals[i] > 21) { 
     cout << "Value: " << usersVals[i] << endl; 
    } 
} 
1

Хорошо, я собираюсь объяснить вам, и держать его просто. Этот цикл

`for (int i = NUM_ELEMENTS - 1; i > 21; i--)` 

никогда не будет выполнен, потому что в первой итерации вы проверяете, если (NUM_ELEMENTS-1 = 7)> 21. Затем вы уменьшаете i, так что это займет серию (6,5,4, ...), и здесь ничего не произойдет.

Если вы должны суммировать числа больше, чем 21, которые я полагаю, что вам нужно, то вам придется удалить выше петлю и изменить свой второй цикл для:

for (i = 0; i < NUM_ELEMENTS; i++) { 
if(userVals[i]>21) 
sumVal = sumVal + userVals[i]; 
} 

Таким образом, вы добавляете числа в массиве, которые только больше 21. Индекс userVals определяется переменной i, которая также действует как счетчик.

1

Вы на правильном пути. В вашем подходе есть всего несколько ошибок.

#include <iostream> 
#include <stdlib.h> 

using namespace std; 

int main() { 
    const int NUM_ELEMENTS = 8; 
    int userVals[NUM_ELEMENTS]; 
    int i = 0; 
    int sumVal = 0; 
    int prntSel = 0; 
    int size = sizeof(userVals)/sizeof(int); // Get size of your array 
               // 32/4 = 8 (ints are 4 bytes) 
    cout << "Enter " << NUM_ELEMENTS << " integer values..." << endl; 


    for (i = 0; i < NUM_ELEMENTS; ++i) { 
     cin >> userVals[i]; 
    } 

    for(int i = 0; i < size; i++) { 
     if(userVals[i] > 21) { // Is number > 21? 
      cout << userVals[i] << endl; // If so, print said number 
      exit(0); // And exit 
     } 
     else 
      sumVal += userVals[i]; // Else sum your values 
    } 

    cout << "Sum: " << sumVal << endl; 

    return 0; 
} 
+0

Последняя скобка не является частью блока кода. – matsjoyce