Charles
Charles

Reputation: 99

Function Definition Expected Error

I'm still new to the forum so I apologize in advance for forum - etiquette issues.

I'm getting an error that makes no sense and I cannot find a reference to anywhere.

The code in question is in c, and was written for the purpose of reading a grid of numbers to find the largest product of four adjacent. It uses a two dimensional array to provide x-y like coordinates.

The error I'm getting is along the lines of ...

...../p11-largest-grid-product.c:30 function definition expected

This is confusing because I do not use any functions (besides the main function of course).

My code is as follows

#include <stdio.h>

int main
{


// decalare and value vars
int a, n, p, g = 0;

// initialize two dimensional array
int str[21][21];
// fill array 'str'
int str[1] = {08, 02, 22, 97, 38, 15, 00, 40, 00, 75, 04, 05, 07, 78, 52, 12, 50, 77, 91, 08};
int str[2] = {49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 04, 56, 62, 00};
int str[3] = {81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 03, 49, 13, 36, 65};
int str[4] = {52, 70, 95, 23, 04, 60, 11, 42, 69, 24, 68, 56, 01, 32, 56, 71, 37, 02, 36, 91};
int str[5] = {22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80};
int str[6] = {24, 47, 32, 60, 99, 03, 45, 02, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50};
int str[7] = {32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70};
int str[8] = {67, 26, 20, 68, 02, 62, 12, 20, 95, 63, 94, 39, 63, 08, 40, 91, 66, 49, 94, 21};
int str[9] = {24, 55, 58, 05, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72};
int str[10] = {21, 36, 23, 09, 75, 00, 76, 44, 20, 45, 35, 14, 00, 61, 33, 97, 34, 31, 33, 95};
int str[11] = {78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 03, 80, 04, 62, 16, 14, 09, 53, 56, 92};
int str[12] = {16, 39, 05, 42, 96, 35, 31, 47, 55, 58, 88, 24, 00, 17, 54, 24, 36, 29, 85, 57};
int str[13] = {86, 56, 00, 48, 35, 71, 89, 07, 05, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58};
int str[14] = {19, 80, 81, 68, 05, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 04, 89, 55, 40};
int str[15] = {04, 52, 08, 83, 97, 35, 99, 16, 07, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66};
int str[16] = {88, 36, 68, 87, 57, 62, 20, 72, 03, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69};
int str[17] = {04, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 08, 46, 29, 32, 40, 62, 76, 36};
int str[18] = {20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 04, 36, 16};
int str[19] = {20, 73, 35, 29, 78, 31, 90, 01, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 05, 54};
int str[20] = {01, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 01, 89, 19, 67, 48};

// horizontal
for( n = 1 ; n != 21 ; n++ )
{

    for( a = 3 ; a != 20 ; a++ )
    {

        p = str[n][a] * str[n][a-1] * str[n][a-2] * str[n][a-3];
        if( p > g )
        {

            g = p;

        }

    }

}

// vertical
for( a = 0 ; a != 20 ; a++ )
{

    for( n = 4 ; n != 21 ; n++ )
    {

        p = str[n][a] * str[n-1][a] * str[n-2][a] * str[n-3][a];
        if( p > g )
        {

            g = p;

        }

    }

}

// diagonal not /
for( n = 1 ; n != 18 ; n++ )
{

    for( a = 0 ; a != 17 ; a++ )
    {

        p = str[n][a] * str[n+1][a+1] * str[n+2][a+2] * str[n+][a+3];
        if( p > g )
        {

            g = p;

        }

    }

}

// diagonal /
for( n = 1 ; n != 18 ; n++ )
{

    for( a = 3 ; a != 20 ; a++ )
    {

        p = str[n][a] * str[n+1][a-1] * str[n+2][a-2] * str[n+3][a-3];
        if( p > g )
        {

            g = p;

        }

    }

}


getchar();
return 0;
}

Any explanation as to why these things worked/did not work and anything that can lead to a better understanding of these ideas will be appreciated. Links to helpful stuff are as well. I have tried to find a solution on my own (I'm self taught as I'm in high school) but with no luck.

Any tips for a good windows debugger for c are also appreciated.

Upvotes: 0

Views: 2225

Answers (3)

phyrrus9
phyrrus9

Reputation: 1467

You are not properly defining main, you have:

int main
{
    ...

But, you need:

int main()
{
    ...

in order for the compiler to know you are creating a function.

Upvotes: 1

verbose
verbose

Reputation: 7917

The function definition expected error is probably caused by missing parentheses between main and the opening brace. Try this: int main () {.

Besides this, though, there are odd things happening in your code:

  1. It initializes a 21 x 21 array of ints, but you call call it str as though you intend it to be an array of strings.
  2. Arrays can only be initialized at declaration time. Once you've declared it, you cannot re-declare int str[1] and try to initialize values.
  3. Arrays are zero-indexed; the first row of str[21][21] would be str[0], not str[1]. I'm not sure why you're leaving the top row out of your (attempted) initialization.

So even if you do rectify the function definition expected error by supplying the parentheses, the code is still broken in other ways.

Upvotes: 3

doctorlove
doctorlove

Reputation: 19272

I would hazard a guess that

p = str[n][a] * str[n+1][a+1] * str[n+2][a+2] * str[n+][a+3];
                                                    ^^^

is the problem. You probably intended to add something to n.


EDIT

With the extra information in the comment, line 30 says

int main {

A function takes (possibly no) parameters, so try this

int main () {

While you are there watch out for a leading 0 meaning octal, making 08 and 09 make no sense.

Upvotes: 2

Related Questions