Language: C++

#define REP( i, m, n ) for ( int i = (int)( m ); i < (int)( n ); ++i )
#define EACH( v, c ) for ( auto &v : c )

#define ALL( c ) (c).begin(), (c).end()

struct Point
{
	double x, y;

	Point() : x( 0 ), y( 0 )
	{
		return;
	}

	Point( double x, double y ) : x( x ), y( y )
	{
		return;
	}

	Point operator + ( const Point &a ) const
	{
		return Point( x + a.x, y + a.y );
	}

	Point operator - ( const Point &a ) const
	{
		return Point( x - a.x, y - a.y );
	}

	Point operator * ( const double &a ) const
	{
		return Point( x * a, y * a );
	}

	Point operator / ( const double &a ) const
	{
		return Point( x / a, y / a );
	}

	bool operator < ( const Point &a ) const
	{
		return x == a.x ? y < a.y : x < a.x;
	}
};

// ??????
double cross( const Point &a, const Point &b )
{
	return a.x * b.y - a.y * b.x;
}

// Graham Scan
vector< Point > getConvex( vector< Point > ps )
{
	const int N = ps.size();

	sort( ALL( ps ) );

	int k = 0;
	vector< Point > convex( N * 2 );

	for ( int i = 0; i < N; i++ )
	{
		while ( 2 <= k && cross( convex[ k - 1 ] - convex[ k - 2 ], ps[i] - convex[ k - 1 ] ) <= 0 )
		{
			k--;
		}

		convex[ k++ ] = ps[i];
	}

	for ( int i = N - 2, t = k; 0 <= i; i-- )
	{
		while ( t < k && cross( convex[ k - 1 ] - convex[ k - 2 ], ps[i] - convex[ k - 1 ] ) <= 0 )
		{
			k--;
		}

		convex[ k++ ] = ps[i];
	}

	convex.resize( k - 1 );

	return convex;
}

int main()
{
	cin.tie( 0 );
	ios::sync_with_stdio( false );

	while ( true )
	{
		int n;
		cin >> n;

		if ( !n )
		{
			break;
		}

		vector< Point > ps( n );

		EACH( p, ps )
		{
			char d;

			cin >> p.x >> d >> p.y;
		}

		vector< Point > convex = getConvex( ps );

		cout << n - convex.size() << endl;
	}

	return 0;
}

Compiler output:
a.cc:53:1: error: 'vector' does not name a type
   53 | vector< Point > getConvex( vector< Point > ps )
      | ^~~~~~
a.cc: In function 'int main()':
a.cc:89:9: error: 'cin' was not declared in this scope
   89 |         cin.tie( 0 );
      |         ^~~
a.cc:90:9: error: 'ios' has not been declared
   90 |         ios::sync_with_stdio( false );
      |         ^~~
a.cc:102:17: error: 'vector' was not declared in this scope
  102 |                 vector< Point > ps( n );
      |                 ^~~~~~
a.cc:102:31: error: expected primary-expression before '>' token
  102 |                 vector< Point > ps( n );
      |                               ^
a.cc:102:33: error: 'ps' was not declared in this scope
  102 |                 vector< Point > ps( n );
      |                                 ^~
a.cc:111:31: error: expected primary-expression before '>' token
  111 |                 vector< Point > convex = getConvex( ps );
      |                               ^
a.cc:111:33: error: 'convex' was not declared in this scope
  111 |                 vector< Point > convex = getConvex( ps );
      |                                 ^~~~~~
a.cc:111:42: error: 'getConvex' was not declared in this scope
  111 |                 vector< Point > convex = getConvex( ps );
      |                                          ^~~~~~~~~
a.cc:113:17: error: 'cout' was not declared in this scope
  113 |                 cout << n - convex.size() << endl;
      |                 ^~~~
a.cc:113:46: error: 'endl' was not declared in this scope
  113 |                 cout << n - convex.size() << endl;
      |                                              ^~~~