在我的数组中打印了太多逗号

时间:2016-08-31 06:30:50

标签: c++ arrays

我刚刚创建了一个程序,它将接受用户输入并构建一个数组,然后反转该数组。唯一的问题是我需要它来打印用逗号分隔的值(,)每当我将它添加到我的循环时它会打印太多,下面是我的代码。

#include <iostream>

using std::cout;
using std::endl;
using std::cin;

void reverseArray(int [], int);
void printArray(int [], int );

void printArray(int arr[], int count)
{       
        cout << "{"; 
        for(int i = 0; i < count; ++i)
                cout << arr[i] << ','; // here is where it is printing one two many commas.
        cout << "}" << '\n';
}

void reverseArray(int arr[], int count)
{

    int temp;
    for (int i = 0; i < count/2; ++i)
     {
            temp = arr[i];
            arr[i] = arr[count-i-1];
            arr[count-i-1] = temp;
     }
}

int main ()
{
        int SIZE;
        cout << "How big is this thing " << endl;
        cin >> SIZE;
        int arr[SIZE];
        for(int i=0;i<SIZE;i++)
        {
            cout<<"Enter element "<<i+1<<":";
            cin>>arr[i];
        }

        cout<<"\nBefore reverse\n";
        printArray(arr, SIZE);
        reverseArray(arr, SIZE);
        cout<<"\nAfter reverse\n";
        printArray(arr, SIZE);

        return 0;
}

程序像这样运行

How big is this thing 
4
Enter element 1:3
Enter element 2:5
Enter element 3:7
Enter element 4:2

Before reverse
{3,5,7,2,}

After reverse
{2,7,5,3,}

如何停止逗号打印太多次。

干杯。

2 个答案:

答案 0 :(得分:2)

编写代码如下

void printArray(int arr[], int count) {       
    cout << '{'; 

    int i = 0;

    for(i = 0; i < count-1; ++i) {
        cout << arr[i] << ',';
    } 

    cout << arr[i] << "}\n";
}

答案 1 :(得分:2)

if声明是否突然禁止?只需使用它:

void printArray(int arr[], int count)
{       
    cout << "{"; 
    if ( count > 0 )
       cout << arr[0];   
    for(int i = 1; i < count; ++i)
       cout << ',' << arr[i];
    cout << "}" << '\n';
}

我需要提一下,你的代码的另一个问题是你在这里使用的C ++语法是无效的ANSI C ++:

    cin >> SIZE;
    int arr[SIZE];

您不能使用变量作为元素数在C ++中声明数组。您当前的代码使用名为Variable Length Arrays (VLA)的编译器扩展。

我的建议是远离在C ++程序中使用VLA。它们导致很多问题,一个是它们不是标准的(你的代码不能用任何版本的Visual Studio编译器编译),另一个是因为只是不使用它们就可以避免很多运行时错误。 / p>

相反,请使用std::vectorstd::vector是声明动态数组的标准C ++方法。此外,您拥有vector知道其大小的所有好处,以及使用vector::at()检查可选边界。 VLA没有这些优势。

   #include <vector>

    cin >> SIZE;
    std::vector<int> arr(SIZE);

一旦你这样做,那么你正在调用的函数不再需要传递SIZE值,因为std::vector只需调用vector::size()成员函数即可知道它的大小。 / p>