gpt4 book ai didi

c++ - 从用户输入中删除数组

转载 作者:太空宇宙 更新时间:2023-11-04 12:44:42 28 4
gpt4 key购买 nike

我是 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,它给了我

现在的元素:
2个
-33686019
0

如果这让您感到困惑,我很抱歉!我正在努力学习自己。感谢您的耐心等待!

最佳答案

假设:

  1. arr 是一个固定大小的数组。
  2. size 实际上是一个变量,它存储当前“使用”的数组元素的数量。
  3. 您的输入策略接受以 1 开头的索引,因此 arr[0] 对应于输入 pos = 1

这部分有几个问题:

            for (i = pos; i <= size; i++)
{
arr[i - 1] = arr[i];
}
arr[size] = 0;

首先,如果大小等于数组的大小,你会得到未定义的行为,因为 arr[size]不存在。这就是你得到奇怪值的地方,它们是尝试读取数组边界之外的结果。这是未定义的行为。

如果不想打印“未使用”的元素,则在移动数组后必须减小大小。

for (int i = pos-1; ++i < size;  ) 
// array should stop when i < size, but increment happens at beginning of loop.
{
arr[i-1] = arr[i];
}
arr[size-1] = 0; // set last element to zero
size--;

关于c++ - 从用户输入中删除数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52290526/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com