【问题标题】:C++: using for loop to allow user input of numbers into arrayC ++:使用for循环允许用户将数字输入数组
【发布时间】:2016-07-27 14:35:30
【问题描述】:

我是社区和编码方面的新手。现在我正在我的 CC 上介绍计算机科学,我们正在学习 C++。无论如何,我必须创建一个程序来询问用户一个数字,这将是数组new_array 的大小指示器。然后程序要求用户一个一个地输入数字,然后反向输出。 #包括 使用命名空间标准;

int main()
{
cout << "How many numbers?\n";
int numbers; // holds amount of numbers to be entered into array
cin >> numbers;
int new_array[numbers];
for(int counter = 0; counter < numbers; counter++)
{
    cout << "Enter number " << counter << endl;
    cin >> new_array[counter];
}

cout << "You entered: " << endl;

for(int i = numbers; i >= 0 ; i-- )
{
    cout << new_array[i] << endl;

}

return 0;
}

我了解如何执行此操作,并且在大多数情况下,我的程序有效。它可以很好地输出反向输入的数字,但在此之前,它会输出大而奇怪的数字。例如,如果用户输入5作为要输入的数字数量,然后分别输入1, 2, 3, 46作为5数字,程序先输出数字4669476,然后输出数组中的数字反向。谁能向我解释我做错了什么以及如何解决这个问题?提前谢谢你! PS要温柔!我是这方面的新手

【问题讨论】:

    标签: c++ arrays loops c++11 for-loop


    【解决方案1】:

    这个循环读取越界:

    for(int i = numbers; i >= 0 ; i-- )
    {
    

    如果您在脑海中跟随i,您将看到您将条目numbers 输出到0,而实际上您应该将条目numbers-1 输出到0

    另一种模式是:

    for( int i = numbers; i--; )
    

    或者你可以使用传说中的--&gt; operator

    可以“简单地”从numbers - 1 开始,但是您使用的循环模式不适用于无符号计数器(因为它们始终是&gt;= 0)。恕我直言,使用适用于所有类型的模式是个好主意;那么你以后犯错的可能性就会降低。

    【讨论】:

      【解决方案2】:

      在您的显示for loop 中,您从超出数组范围的i = numbers 开始。既然数组是从0 till size - 1开始的,那么就需要从i = numbers - 1一直到&gt;=0

      【讨论】:

        【解决方案3】:

        因为你是从array[numbers] 开始的,没有定义。

        array[0], array[1], ... array[numbers-1] 已定义。

        【讨论】:

          【解决方案4】:

          在 C 中,数组从 0 开始存储,而不是 1。所以最后一个数字存储在 array[4]

          所以当你写出来时,你应该开始一个numbers - 1,而不是仅仅numbers

          【讨论】:

            【解决方案5】:

            因为您从超出范围的索引开始给您垃圾值。

            你的代码应该是这样的

             for(int i = numbers-1; i >= 0 ; i-- )
             {
                 cout << new_array[i] << endl;
              }
            

            【讨论】:

              猜你喜欢
              • 2021-04-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-08-28
              • 2016-11-03
              • 2015-01-21
              相关资源
              最近更新 更多