0

I am trying to create a program to generate magic square by a given value of n in C language. here is the code

#include<stdio.h> 
#include<string.h> 

// A function to generate odd sized magic squares 
void generateSquare(int n) 
{ 
    int magicSquare[n][n]; 

    // set all slots as 0 
    memset(magicSquare, 0, sizeof(magicSquare)); 

    // Initialize position for 1 
    int i = n/2; 
    int j = n-1; 

    // One by one put all values in magic square 
    for (int num=1; num <= n*n; ) 
    { 
        if (i==-1 && j==n) //3rd condition 
        { 
            j = n-2; 
            i = 0; 
        } 
        else
        { 
            // 1st condition helper if next number  
            // goes to out of square's right side 
            if (j == n) 
                j = 0; 

            // 1st condition helper if next number  
            // is goes to out of square's upper side 
            if (i < 0) 
                i=n-1; 
        } 
        if (magicSquare[i][j]) //2nd condition 
        { 
            j -= 2; 
            i++; 
            continue; 
        } 
        else
            magicSquare[i][j] = num++; //set number 

        j++; i--; //1st condition 
    } 

    // Print magic square 
    printf("The Magic Square for n=%d:\nSum of "
       "each row or column %d:\n\n",  n, n*(n*n+1)/2); 
    for (i=0; i<n; i++) 
    { 
        for (j=0; j<n; j++) 
            printf("%3d ", magicSquare[i][j]); 
        printf("\n"); 
    } 
} 

// Driver program to test above function 
int main() 
{ 
    int n = 7; // Works only when n is odd 
    generateSquare (n); 
    return 0; 
} 

while compiling the program in turbo c compiler i get the following errors

line 7 constant expression required

line 13 declaration not allowed here

line 14 declaration not allowed here

undefined symbol num

the program works well if i run it as a c++ file but it shows errors as a c program

2
  • 4
    You need a C compiler that supports C99. Turbo C is way too old. Commented Nov 13, 2018 at 16:24
  • 2
    VLAs were introduced in C99. Your compiler is probably too old to support that language standard. Commented Nov 13, 2018 at 16:24

1 Answer 1

1

You are probably using TurboC.

TurboC uses an outdated compiler of C language. It supports Borland Compiler . It was preferable when windows Xp was in trend. It has now become obsolete.

Use latest gcc or g++ instead.

You may shift to Ubuntu or Mac

or can try CodeBlocks for Windows.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.