一个变量的输入值也被保存到另一个变量中
Posted
技术标签:
【中文标题】一个变量的输入值也被保存到另一个变量中【英文标题】:Input value of a variable is also being saved into another variable 【发布时间】:2020-02-06 22:24:36 【问题描述】:在下面的代码中调用get_array()
的方法出现问题,因为capacity
变量在用户在控制台中首次输入后更改为
和capacity
值分配给用户给出的值
我不确定发生了什么,但这让我很恼火,还是我错过了一些基本知识?请帮忙
#软件
我正在使用 CodeBlocks v17.12
#操作系统
Windows 10 家庭版
#include <iostream>
using namespace std;
class LinearSearch
int my_arr[];
int capacity, c, val;
public:
LinearSearch()
this->capacity = 0;
this->c = 0;
this->val = 0;
void get_array()
cout << "Define number of elements in the array: ";
cin >> this->capacity;
for( int i = 0; i < this->capacity; i++ )
cout << "Enter value " << i+1 << " - " << this->capacity << " : ";
cin >> this->my_arr[i];
for( int k = 0; k < capacity; k++ )
cout << my_arr[k] << endl;
cout << endl;
void search_value()
cout << endl << "Enter a value to search: ";
cin >> this->val;
for(int j = 0; j < capacity; j++)
if(my_arr[j]==val)
cout << endl << this->val << " value found in the array at index array[" << j << "] value number " << j+1 << "." << endl << endl;
c++;
break;
if(this->c==0)
cout<<endl<<this->val<<" value not found in the array."<<endl<<endl;
;
int main()
int choice;
LinearSearch obj;
while( true )
cout << "0) Exit\n1) Insert Data\n2) Search Data\n\nEnter Option: ";
cin >> choice;
switch( choice )
case 0:
return 0;
case 1:
obj.get_array();
break;
case 2:
obj.search_value();
break;
default:
cout << "\nWrong Option!!\n\n";
break;
return 0;
【问题讨论】:
正如我在回答中所写,int my_arr[];
不是有效的 C++,也不是您编写的有效 C。你用哪个编译器来编译这个?我测试的主要三个都给出错误:godbolt.org/z/oWakgD
GCC 编译器没有显示任何错误,所以我认为它是有效的 .而且我知道如何在没有大小的情况下声明数组,但是我尝试过这种方式,它不会显示任何错误,这就是为什么我认为它是有效的现在,我的意思是为什么要更改 capacity
变量,尽管这是一个问题一个数组的声明?
你是对的,旧版本的 GCC 编译它没有错误,参见***.com/questions/38130887/…。但是,这仍然是不允许的。那是编译器中的一个错误。最佳情况下,它将被视为一个长度为零的数组,在这种情况下,您会越界访问它,从而导致undefined behavior。在 C++ 中,仅仅因为没有错误并不意味着程序是格式良好的。
我推荐了一个good book 来学习C++。您必须学习语言规则。试错法在 C++ 中不起作用,因为许多规则在违反时不会导致任何警告或错误,并且程序可能似乎工作,即使它是错误的并且具有未定义的行为。跨度>
当你输入一个容量值时,你应该在内存中创建数组。 my_arr = new int[this->capacity];
之类的东西看起来你的数组有 0 个元素。因此,当您尝试填充它时,实际上是在破坏 my_arr 变量之后的数据。
【参考方案1】:
int my_arr[];
不是有效的标准 C++,即使在 C 中,它也只能作为所谓的灵活数组成员出现在成员列表的末尾。
您应该改用std::vector<int> my_arr;
。 (需要#include<vector>
。)
然后您可以使用my_arr.push_back(/*some number here*/);
向其中添加新元素,或者您可以使用my_arr.resize(/*new size here*/);
调整数组的大小。
【讨论】:
哦,现在我明白了。非常感谢:D以上是关于一个变量的输入值也被保存到另一个变量中的主要内容,如果未能解决你的问题,请参考以下文章