编写一个程序,询问用户最多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,
答案 0 :(得分:0)
第一:您使用两个不同的变量 - num
和i
- 但您只增加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)
检查输入循环中的索引。