Lab*_*ayk 2 c++ arrays for-loop
我是 c++ 的初学者。我花了几个小时试图弄清楚循环和数组的结构。
目标:获取用户输入并将其设置为数组的大小分配。获取另一个用户输入并将值添加到数组中。向后显示数组的输出。[最后一个索引...第一个索引`ex]
我在任何地方都读到过,在我的教科书中,空格不被 cin >> 计算在内,但我的代码显示了空格。我尝试测试我的循环是否正确地将输入值添加到循环中。也许我的输出循环是错误的?我无法弄清楚问题是什么。
这些是我得到的示例输出。如果我有一个包含 5 个元素的数组,为什么只输出 3 个项目?在向后输出循环中,我没有看到所有数组项,并且它重复 3。
我有很多评论来记录我的思考过程。感谢您的查看并帮助我!
我的测试用例示例:
5
1 2 3 4 5
print array
123
backwards array
3 3 2 1
...Program finished with exit code 0
Press ENTER to exit console.
Run Code Online (Sandbox Code Playgroud)
预期示例:(用户输入)5
(用户输入)1 2 3 4 5(按 Enter 键)
预期输出:
5 4 3 2 1
5
1 2 3 4 5
print array
123
backwards array
3 3 2 1
...Program finished with exit code 0
Press ENTER to exit console.
Run Code Online (Sandbox Code Playgroud)
int sizeofArray;
Run Code Online (Sandbox Code Playgroud)
这声明了一个int命名的sizeofArray. 这int没有初始化,因此它包含随机垃圾。
int array[sizeofArray];
Run Code Online (Sandbox Code Playgroud)
这是错误的,有两个原因。这不是有效的 C++。在 C++ 中,所有数组的大小都是在编译时指定的固定常量。这就是 C++ 数组的工作原理。int a[4]是一个有效的数组声明。该数组的大小为 4。它是在编译时指定的。不能通过非常量表达式指定数组的大小。您的 C++ 编译器仅接受此构造作为 C++ 语言的非标准扩展,但即使假设您愿意使用此非标准 C++,这也会因另一个原因而失败:
cin >> sizeofArray;
Run Code Online (Sandbox Code Playgroud)
现在读取sizeofArray自cin. 您显然期望这将导致先前声明的数组具有此大小。这不会发生(这是数组声明的第二个错误)。该数组是使用未初始化的变量声明的,作为其大小,这是未定义的行为。
C++ 不是这样工作的,C++ 不像电子表格那样工作。如果声明一个其大小由变量(使用非标准 C++ 扩展)指定的数组,然后更改该变量的值,则不会追溯更改先前声明的数组的大小。C++ 代码一次执行一个语句:你声明一些东西,它就会被声明;你声明了别的东西,那东西也被声明了;你改变了某个变量的值,它就改变了;等等。如果先前根据该变量的内容设置了不同的变量,则先前设置的变量的值不会仅仅因为该变量现在具有不同的值而自动更改。这就是电子表格的工作方式,而不是 C++。
您必须纠正所有这些问题才能修复您的程序。如果您希望继续使用非标准 C++,您可以cin >> sizeofArray 在声明array.
或者,如果您确实希望学习如何使用标准 C++ 正确地执行此操作,您可以继续阅读 C++ 教科书,直到您了解其内容及其工作原理的描述和解释,std::vector然后采取该方法。
for (int j=sizeofArray; j >=0; --j) {
cout << array[j] << " ";
}
Run Code Online (Sandbox Code Playgroud)
又一个逻辑缺陷。假设sizeofArray是 3。数组中有三个值。它们是array[0]、array[1]、 和array[2]。
如果您在纸和笔上计算出上面的作用,它会尝试打印,然后是array[3]、 then和 finally 。很明显没有,所以这个循环的逻辑也需要调整。请注意,必须打印的第一个值(循环的第一次迭代)应该比数组的大小小1 。您可以简单地通过在打印每个数组元素的值之前而不是之后(作为循环迭代的一部分)递减索引变量 来实现这一点。array[2]array[1]array[0]array[3]j--
| 归档时间: |
|
| 查看次数: |
221 次 |
| 最近记录: |