我刚刚创建了一个程序,它将接受用户输入并构建一个数组,然后反转该数组。唯一的问题是我需要它来打印用逗号分隔的值(,)每当我将它添加到我的循环时它会打印太多,下面是我的代码。
#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,}
如何停止逗号打印太多次。
干杯。
答案 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::vector
。 std::vector
是声明动态数组的标准C ++方法。此外,您拥有vector
知道其大小的所有好处,以及使用vector::at()
检查可选边界。 VLA没有这些优势。
#include <vector>
cin >> SIZE;
std::vector<int> arr(SIZE);
一旦你这样做,那么你正在调用的函数不再需要传递SIZE
值,因为std::vector
只需调用vector::size()
成员函数即可知道它的大小。 / p>