用C ++打印数组

时间:2014-10-16 18:44:13

标签: c++

我试图做一些我的C ++家庭作业,但我似乎遇到了一个问题。我需要这样做,以便用户输入8个数字,那些表示8个存储在一个数组中。然后,如果其中一个数字大于21,则输出所述数字。代码如下,它有点草率。是的,第一年C ++学习者:p

#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 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

好的,我将向您解释并保持简单。这个循环

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

将永远不会执行,因为在您的第一次迭代中,您正在检查是否(NUM_ELEMENTS-1 = 7)&gt; 21。然后你递减我所以这将采取系列(6,5,4,...),这里什么都不会发生。

如果你必须将大于21的数字相加,我认为这是你需要的,那么你将不得不删除上面的循环并修改你的第二个循环:

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

这样,您可以在数组中添加仅大于21的数字.userVals的索引由i变量确定,该变量也充当计数器。

答案 2 :(得分: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;
}

答案 3 :(得分: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;
}

此行也不需要,因为您没有使用它。

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

答案 4 :(得分: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;
}

答案 5 :(得分: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;
    }
}