编写一个程序,询问用户最多10个整数(可能更少);使用数组和for循环

时间:2017-04-15 18:43:04

标签: c++ arrays loops for-loop

编写一个程序,询问用户最多10个整数(可能更少);当用户输入零时停止提示。然后按相反的顺序列出数字。使用以下示例作为指南运行:

    Enter a number (0 to stop): 11
    Enter a number (0 to stop): 33
    Enter a number (0 to stop): 55
    Enter a number (0 to stop): 77
    Enter a number (0 to stop): 99
    Enter a number (0 to stop): 0
    Your numbers in reverse order are: 
    99, 77, 55, 33, 11

下面是我目前的代码,似乎无法弄清楚我做错了什么。

#include <iostream>
#include <string>
using namespace std;


int main( ) {
int max = 10;
int num = 1;
int userVal[max];
int i = 0;


while(num <= max) {
  cout << "Enter a number (0 to stop): ";
  cin >> userVal[i];
  cout << userVal[i] << endl;
  if(userVal[i] == 0) {
     break;
  }
  ++num;
}
cout << num << endl;
cout << "Your numbers in reverse order are: " << endl;
for(i = num; i >= 0; --i) {
  cout << userVal[i];
  if(i < num - 2) {
     cout << ", ";
  }
}

return 0;
}

下面是输出我明显如上所述我希望数字反向打印

    Enter a number (0 to stop): 11
    Enter a number (0 to stop): 33
    Enter a number (0 to stop): 55
    Enter a number (0 to stop): 77
    Enter a number (0 to stop): 99
    Enter a number (0 to stop): 0
    6
    Your numbers in reverse order are: 
    6553532600-6638791760, 4197268, 0, 0, 

4 个答案:

答案 0 :(得分:0)

第一:您使用两个不同的变量 - numi - 但您只增加num变量。更好:

int num = 0; // start with 0 - this is the number read initially: nothing...
while(num < max) // need to use < instead
    std::cin >> userVal[num]; // can use your counter now as index, too...

但是,您必须相应地调整输出循环:

for(int i = num - 1; i >= 0; --i)

第二:你想要总是打印一个逗号 - 除非最后一个索引(0);这样:

if(i > 0)
    std::cout << ", ";

最后:你应该声明max const或constexpr。 C ++不支持堆栈上的可变长度数组。通常情况下,您的编译器应该抱怨int userVal[max];(这次可能会接受它,因为它识别max永远不会被更改 - 但这不是C ++标准)。

答案 1 :(得分:0)

首先,在你的while循环中,你使用i来分配数组中的值,而你需要num。其次,num应设置为零,以便填充数组的第一个元素。试试这段代码:

#include <iostream>
#include <string>
using namespace std;


int main( ) {
int max = 10;
int num = 0;
int userVal[max];
int i = 0;


while(num <= max) {
   cout << "Enter a number (0 to stop): ";
   int number;
   cin >> number;

   cout << number << endl;
   if(number == 0) {
      break;
   }

    userVal[num] = number;
    ++num;

}
cout << num << endl;
cout << "Your numbers in reverse order are: " << endl;
for(i = num; i >= 0; --i) {
   cout << userVal[i];
   if(i < num - 2) {
       cout << ", ";
  }
}

return 0;
}

答案 2 :(得分:0)

感谢所有人帮助下面的代码是我想出的每一个建议的一点点。

#include <iostream>
#include <string>
using namespace std;


int main( ) {
  int max = 10;
  int num = 1;
  int userVal[max];
  int i = 0;


  while(num < max) {
   cout << "Enter a number (0 to stop): ";
   int number;
   cin >> number;
   cout << number << endl;

   if(number == 0) {
     break;
   }
   userVal[num] = number;
   ++num;
  }
  cout << "Your numbers in reverse order are: " << endl;
  for(i = num - 1; i > 0; --i) {
    cout << userVal[i];
    if(i > 1) {
     cout << ", ";
    }
  }
  cout << endl;

  return 0;
 }

我收到了以下输出

    Enter a number (0 to stop): 11
    Enter a number (0 to stop): 33
    Enter a number (0 to stop): 55
    Enter a number (0 to stop): 77
    Enter a number (0 to stop): 99
    Enter a number (0 to stop): 0
    Your numbers in reverse order are: 
    99, 77, 55, 33, 11

答案 3 :(得分:-1)

检查输入循环中的索引。