不确定我在这里做错了什么。我无法让它运行。
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int a[] = { 2, 3, 4, 5 };
skipOne(a, 2);
}
void skipOne(int * array, int n)
{
int total = 0;
for (int i = 0; i < sizeof(array); i++)
{
if (i != n)
{
total = + array[i];
}
}
cout << "The total is: " << total << endl;
}
这是我从下面的帮助中得到的。
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
void skipOne(vector<int> & array, int n)
{
int total = 1;
for (int i = 0; i < array.size(); i++)
{
if (i != n)
{
total *= array[i];
}
}
cout << "The total is: " << total << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> a = { 2, 3, 4, 5 };
skipOne(a, 0);
skipOne(a, 1);
skipOne(a, 2);
skipOne(a, 3);
}
答案 0 :(得分:5)
sizeof
对传递的数组或指针不起作用。您必须将数组长度作为参数传递。
此外,您必须在使用之前声明函数。
void skipOne(int * array, int n, int length); // declare here
int _tmain(int argc, _TCHAR* argv[])
{
int a[] = { 2, 3, 4, 5 };
skipOne(a, 2, 4);
}
void skipOne(int * array, int n, int length)
{
int total = 0;
for (int i = 0; i < length; i++) // use length here
{
if (i != n)
{
total += array[i]; // += instead of = +
}
}
cout << "The total is: " << total << endl;
}
答案 1 :(得分:0)
sizeof(array)等同于sizeof(int *),因为数组的类型是int *,通常等于4或8,具体取决于使用的系统。它与数组a中的元素数量没有共同之处。 程序中使用的任何名称也应在使用前定义。你在main中使用函数skipOne但它尚未声明。
因此,有效代码可以采用以下方式
#include "stdafx.h"
#include <iostream>
int skipOne( const int *, int, int );
int _tmain(int argc, _TCHAR* argv[])
{
int a[] = { 2, 3, 4, 5 };
std::cout << "The total is: " << skipOne( a, sizeof( a ) / sizeof( *a ), 2 )
<< std::endl;
}
int skipOne( const int * array, int n, int k )
{
int total = 0;
for ( int i = 0; i < n; i++ )
{
if ( i != k )
{
total += array[i];
}
}
return total;
}
您也可以使用标准容器std :: array。在这种情况下,代码看起来会更简单。例如
#include "stdafx.h"
#include <iostream>
#include <array>
int skipOne( const std::array<int, 4> &, int );
int _tmain(int argc, _TCHAR* argv[])
{
std::array<int, 4> a = { 2, 3, 4, 5 };
std::cout << "The total is: " << skipOne( a, 2 )
<< std::endl;
}
int skipOne( const std::array<int, 4> &a, int k )
{
int total = 0;
for ( int i = 0; i < a.size(); i++ )
{
if ( i != k )
{
total += a[i];
}
}
return total;
}
答案 2 :(得分:-1)
您需要先声明skipOne并使用vector.size()
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
void skipOne(int * array, int n);
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> a = { 2, 3, 4, 5 };
skipOne(a, 2);
}
void skipOne(vector<int> & array, int n)
{
int total = 0;
for (int i = 0; i < array.size(); i++)
{
if (i != n)
{
total = + array[i];
}
}
cout << "The total is: " << total << endl;
}