我在C++从函数中的用户获取输入、添加到数组和打印该数组时遇到问题



我正在学习 c++,我试图让用户在一个函数中输入 4 个数字,然后简单地打印数组。

int getFourNums();
int main(int argc, char** argv){
    int getNums;
    getNums = getFourNums();
    cout << "The array is: " getNums << endl;
}
int getFourNums(){
    int i;
    int myArray[4];
    cout << "Enter 4 nums: ";
    for(i = 0; i < 4; i++){
        cin >> myArray[i];
    }
    return myArray[i];

截至目前,它让我得到四个数字,但打印的结果是"数组是:0"。 我不太确定为什么数组似乎没有填充。

您的根本问题是int getFourNums()只能返回单个整数,而不是它们的数组。 下一个问题是由于历史原因,函数无法返回原始数组。 您的选择是返回一个std::array,一个包含数组的struct,通过引用将数组传递到函数中,或者返回一个std::vector。 我对这个应用程序的偏好是std::vector - 它很灵活,虽然不如std::array效率高,除非你有充分的理由,否则您可能应该默认使用 std::vector。 然后,您的getNums代码将如下所示:

std::vector<int> getFourNums() {
    std::vector<int> result;
    cout << "Enter 4 nums: ";
    for(int i = 0; i < 4; i++){
        int v;
        cin >> v;
        result.push_back(v);
    }
    return result;
}

要打印矢量,请参阅此问题。 我个人的偏好是基于范围的矢量循环;您的口味可能会有所不同。

代码中的一个问题是像

for(i = 0; i < 4; i++){
    cin >> myArray[i];
}

最终会得到i==4.因此,return myArray[i]将超出数组边界和/或访问未初始化的值并产生未定义的行为。

但是,主要问题是,在C++中,您将遵循一种非常不同的方法,并使用std::vector等集合类型而不是普通数组。请参阅以下代码来说明这一点。希望对您有所帮助。

#include <vector>
#include <iostream>
std::vector<int> getFourNums(){
    int val;
    std::vector<int> result;
    cout << "Enter 4 nums: ";
    for(int i = 0; i < 4; i++){
        cin >> val;
        result.push_back(val);
    }
    return result;
}
int main(int argc, char** argv){
    std::vector<int> fourNums = getFourNums();
    for (auto i : fourNums) {
        cout << i << endl;
    }
}

int getFourNums()只会让你返回一个int,而不是整个数组,并且自i == 4以来return myArray[i];是越界的。您只能使用范围 [0,3] 作为数组的索引。这是一个重新设计的版本,代码中有注释。

#include <iostream>
#include <vector>
// don't do "using namespace std;" since it includes
// a lot of stuff you don't need.
// Here's a function that will return a vector of int's
// It'll behave much like a C style array
// but can have variable length and you can use
// a lot of standard functions on it.
std::vector<int> getNums(size_t count) {
    // The "array" we'll return with "count" number of
    // default constructed int:s (they will all be 0):
    std::vector<int> myArray(count);
    std::cout << "Enter " << count << " nums: ";
    // A range based for loop that will go through
    // all int:s in "myArray". "num" will be
    // a reference to each int in the vector which
    // means that if you change the value of "num",
    // you'll actually change the value in the vector.
    for(int& num : myArray) {
        // read values into the int currently
        // referenced by num
        std::cin >> num;
    }
    // return the vector by value
    return myArray;
}
// Put main() last so you don't have to forward declare the functions
// it uses
int main() {
    // call getNums with the value 4 to read 4 int:s
    std::vector<int> Nums = getNums(4);
    std::cout << "The array is:";
    // print each int in the vector. There's no need to use
    // a reference to the int:s here since we won't be changing
    // the value in the vector and copying an int is cheap.
    for(int num : Nums) {
        std::cout << " " << num;
    }
    // std::endl is rarely good when you only want to output a newline.
    // It'll flush the buffer with is costly.
    // Make a habit of using "n" in most cases.
    std::cout << "n";
}

我看到你想返回整个数组,但只看你的返回类型:

int getFourNums()

你返回一个整数对吗?在这种情况下,返回的整数始终myArray[4] 。请注意,这是一个整数值,您返回的内容实际上不属于您!

那怎么办?我建议你传递你的数组来像这样工作:

 void getFourNums(int myArray[]){
    int i;
    cout << "Enter 4 nums: ";
    for(i = 0; i < SIZE; i++){
        cin >> myArray[i];
    }
}

现在你填满了你的数组。那么如何打印阵列呢?我们不能简单地给出我们的数组名称并告诉 cout 像你一样打印它(你实际上不能!这里没有什么神奇的。我们将逐个打印数组的元素:

void printFourNumbers(int array[])
{
    for(int i = 0 ; i < SIZE ; ++i)
    {
        cout << array[i] << endl;
    }
}

最后整个代码如下所示:

#include <iostream>
using namespace std;
const int SIZE = 4;
void getFourNums(int myArray[]);
void printFourNumbers(int array[]);
int main(int argc, char** argv){
    int myArray[SIZE];
    getFourNums(myArray);
    printFourNumbers(myArray);
}
void getFourNums(int myArray[]){
    int i;
    cout << "Enter 4 nums: ";
    for(i = 0; i < SIZE; i++){
        cin >> myArray[i];
    }
}
void printFourNumbers(int array[])
{
    for(int i = 0 ; i < SIZE ; ++i)
    {
        cout << array[i] << endl;
    }
}

相关内容

  • 没有找到相关文章

最新更新