一个变量的输入值也被保存到另一个变量中

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-&gt;capacity]; 之类的东西看起来你的数组有 0 个元素。因此,当您尝试填充它时,实际上是在破坏 my_arr 变量之后的数据。 【参考方案1】:

int my_arr[]; 不是有效的标准 C++,即使在 C 中,它也只能作为所谓的灵活数组成员出现在成员列表的末尾。

您应该改用std::vector&lt;int&gt; my_arr;。 (需要#include&lt;vector&gt;。)

然后您可以使用my_arr.push_back(/*some number here*/); 向其中添加新元素,或者您可以使用my_arr.resize(/*new size here*/); 调整数组的大小。

【讨论】:

哦,现在我明白了。非常感谢:D

以上是关于一个变量的输入值也被保存到另一个变量中的主要内容,如果未能解决你的问题,请参考以下文章

邮递员:我可以将 JSON 对象保存到环境变量中,以便将其链接到另一个请求中吗?

当被断言到另一个变量时,可变数组被覆盖

在 Python 中从一种方法调用变量到另一种方法

引用 指针 解引用

将 GET 变量从第一页保存到另一页

创建从一个类到另一个类的变量