【发布时间】:2018-09-12 08:14:59
【问题描述】:
我是 C++ 和一般编程的新手,并且有一个班级小组作业。我们都在不同的部分工作,我必须制作程序的“删除”部分。我必须删除用户询问的特定变量(如果它在数组中),而不是将数组向右移动。在它完成它需要做的事情之后,它会将数组“缩小”一半。
我认为我可以轻松地进行收缩,但我的代码出现了奇怪的问题,给我的内存地址看起来很奇怪。
这是我的部分代码:)
else if (option == 'd') {
cout << "Delete element:" << endl; //Ask user which array position to delete//
for (int i = 0; i < count; ++i) {
cout << arr[i]; //print out which array index we have///
cout << endl;
int pos; //starts new variable for position///
cin >> pos;
if (pos >= 1 && pos <= size) //As long as position is greater than 1 and less than size it loops//
{
for (i = pos; i <= size; i++)
{
arr[i - 1] = arr[i];
}
arr[size] = 0;
cout << "Elements now:" << endl;
for
(i = 0; i <= size; i++)
cout << arr[i] << endl;
}
else
cout << "Element doesn't exist" << endl; //Tells user it doesn't exist if the position doesn't exist//
所以如果我添加像 2 这样的元素,它会告诉我 2 在数组中。我在输入中输入 2,它给了我
Elements now:
2
-33686019
0
如果这令人困惑,我很抱歉!我正在努力学习自己。感谢您的耐心等待!
【问题讨论】:
-
size是数组中元素的数量,还是顶部索引?你知道顶部索引比元素数少一吗? -
@Someprogrammerdude size 是元素的数量,即 2。
-
@PKPython
arr的类型是什么? “正常”C++ 数组从索引0开始,在索引size-1结束,所以在这种情况下,您的for循环必须在i < size终止,而不是i <= size。使用size=2玩它:i将变为0、1和2- 这是您正在访问的数组中只有两个元素的三个元素。您在其他几个地方执行此操作,因此请查看每个数组访问并问自己“我访问的这个索引是否可以大于size-1?”。使用调试器还可以帮助您了解程序中每个步骤发生的情况——这真的很有帮助。 -
没有理事会的大学编程如何实现数据存储并将代码分离为功能部分会导致代码噩梦。也许教授想为学生说明这一点。或者可能是他不在乎,或者只是想让他们在语言方面挣扎,作为一种教育努力。无论如何,问题是这是不完整的代码,不清楚我们使用的是什么。只清楚根本不使用关注点分离。
-
还可以考虑使用
std::array或std::vector而不是原始C++ 数组。当您的数组索引越界时,它们通常会显示一条诊断消息,因为越界访问原始 C++ 数组只会导致 undefined bahaviour(google that)。