有一个简单的C ++程序的麻烦

时间:2015-06-28 20:20:06

标签: c++ arrays for-loop

我正在创建这个非常简单的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;
}

6 个答案:

答案 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)是新的,它基本上意味着每个in​​t&#39;元素&#39;在&#39;数字&#39;。