我正在创建这个非常简单的C ++程序。 程序要求用户输入几个整数并将它们存储在一个数组中。但是当输入一个特定的整数(例如50)时,输入结束,然后,除了50之外,所有整数都显示在屏幕上。 例如:
输入:
1
2
88
50
输出:
1
2
88
我得到的错误是当我使用cout
打印数组时,会显示所有数字,包括50和我做过的数字甚至输入。
到目前为止这是我的代码:
#include<iostream>
int main() {
int num[100];
for(int i=0;i<=100;i++) {
cin >> num[i];
if (num[i]!=50) break;
}
for(int j=0;j<=100;j++) {
cout << num[j] << endl;
}
return 0;
}
答案 0 :(得分:3)
按以下方式更改程序
#include<iostream>
int main()
{
const size_t N = 100;
int num[N];
size_t n = 0;
int value;
while ( n < N && std::cin >> value && value != 50 ) num[n++] = value;
for ( size_t i = 0; i < n; i++ ) std::cout << num[i] << std::endl;
return 0;
}
这里的第一个循环变量n
用于计算输入值的实际数量。然后将此变量用作第二个循环的上限。
至于你的程序,那么第一个循环的有效索引范围是0-99
,你必须只输出其输入的数组元素。
答案 1 :(得分:3)
do while循环更适合您的问题。停止条件将检查数字是否适合数组(如果k不大于100)并且输入的数字是50。
#include<iostream>
using namespace std;
int main() {
int num[100];
int k = 0;
// A do while loop will be more suitable
do{
cin >> num[k++];
}while(k<100&&num[k-1]!=50);
for (int j = 0; j < k-1; j++) {
cout << num[j] << endl;
}
return 0;
}
此外,摆脱100限制的更好解决方案是使用std::vector
数据结构自动调整其大小,如下所示:
vector<int> num;
int temp;
do {
cin >> temp;
num.push_back(temp);
} while (temp != 50);
注意,您可以使用temp.size()来获取存储的项目数。
答案 2 :(得分:2)
您最多可以读取101个数字,但如果输入50,则会中断循环并打印出来。在打印循环中,您将浏览所有101个数字,但实际上您可能尚未设置所有这些数字。
在APC
变量的第一个循环计数中,在您遇到50并且在打印循环中读取的数字只迭代table
{
border: #000000 1px solid;
background-color: #363636;
display:inline-block;
}
次。
答案 3 :(得分:2)
您已在堆栈上分配了100个整数的数组。默认情况下,这些值不会初始化为零,因此您最终会得到先前在数组中出现的堆栈中的内容。
你在两个循环中也都是一个一个,你分配了100个整数的数组,这意味着索引范围是0-99。
由于问题被标记为C ++,我建议你保留C风格的数组,而是使用std::vector
来存储值。这使得它更灵活,因为您不必指定固定大小(或管理内存),并且您最终没有未初始化的值。
小示例代码(需要C ++ 11编译器):
#include <iostream>
#include <vector>
int main()
{
std::vector<int> numbers; // Store the numbers here
for(int i = 0; i < 100; ++i) // Ask a number 100 times
{
int n;
std::cin >> n;
if( n == 50 ) // Stop if user enters 50
break;
numbers.push_back(n); // Add the number to the numbers vector
}
for (auto n : numbers) // Print all the values in the numbers vector
std::cout << n << std::endl;
return 0;
}
答案 4 :(得分:1)
您的代码中只有2个更改检查出来:
int main()
{
int num[100],i; //initialize i outside scope to count number of inputs
for(i=0;i<100;i++) {
cin >> num[i];
if (num[i]==50) break; //break if the entered number is 50
}
for(int j=0;j<=i-1;j++)
{
cout << num[j] << endl;
}
return 0;
}
答案 5 :(得分:0)
好的,其他人已经指出了两个错误。您应该在循环条件中使用i < 100
而不是i <= 100
,并且必须跟踪您输入的元素数量。
现在让我添加一个答案,我认为它会更好。
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers; // Create an empty vector.
for (int temp; // a temp variable in the for loop.
numbers.size() < 100 && // check that we have less than 100 elements.
std::cin >> temp && // read in the temp variable,
// and check if the read was a success.
temp != 50) // lastly check that the value we read isn't 50.
{
numbers.push_back(temp); // Now we just add it to the vector.
}
for (int i = 0; i < numbers.size(); ++i)
std::cout << numbers[i]; // Now we just print all the elements of
// the vector. We only added correct items.
}
上面的代码在找到50之后甚至不再读取数字。如果你想能够输入任意数量的元素,你只需要删除我们少于100个元素的检查。
现在我对上面的代码进行了一些评论,如果你压缩它,它会减少到只是:
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers; // Create an empty vector.
for (int temp; numbers.size() < 100 && std::cin >> temp && temp != 50)
numbers.push_back(temp);
for (int i = 0; i < numbers.size(); ++i)
std::cout << numbers[i];
}
如果您可以使用C ++ 11标准,则将其缩减为:
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers; // Create an empty vector.
for (int temp; numbers.size() < 100 && std::cin >> temp && temp != 50)
numbers.push_back(temp);
for (int element : numbers)
std::cout << element;
}
for (auto element : numbers)
是新的,它基本上意味着每个int&#39;元素&#39;在&#39;数字&#39;。