3x3 행렬을 입력받은후, 각 행의 합과 열의 합을 구하는 프로그램

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

#define N 3

void readNxN(int a[ N][ N]);
void sumNxN(const int a[ N][ N], int rSum[ N], int cSum[ N]);
void printNxN(const int a[ N][ N], const int rSum[ N],
     const int cSum[ N]);

int main ()
{
 int x[ N][ N];
 int rSum[ N] = { 0}, cSum[ N] = { 0};

 readNxN(x);
 sumNxN(x, rSum, cSum);
 printNxN(x, rSum, cSum);

 return 0;

}

void readNxN(int a[ N][ N])
{
 int i, j;
 printf(\"%d x %d 정수 행렬을 입력하시요:\\n\", N, N);
 for (i = 0; i < N; ++i)
  for(j = 0; j < N; ++i)
   scanf(\"%d\", & a[ i][ j]);
}

void sumNxN(const int a[ N][ N], int rSum[ N], int cSum[ N])
{
 int i, j;
 for (i = 0; i < N; ++i) {
  for (j = 0; j < N; ++j) {
   rSum[ i] += a[ i][ j];
   cSum[ j] += a[ i][ j];
  }
 }
}

void printNxN(const int a[ N][ N], const int rSum[ N], const int cSum[ N])
{
 int i, j;
 const char *lseg = \"_______\";
 const int width = strlen(lseg) - 1;

 for (i = 0; i < N; ++i){
  for (j = 0; j < N; ++j)
   printf(\"%*d\", width, a[ i][ j]);
  printf(\"| %*d\\n\", width, rSum[ i]);
 }
 for (i = 0; i < N; ++i)
  printf(\"%s\", lseg);
 printf(\"+\\n\");
 for (i = 0; i < N; ++i)
  printf(\"%*d\", width, cSum[ i]);
 printf(\"\\n\");
}



위에게 예제여서 똑같이 치고 컴파일하니 에러 하나도 안떳는데

프로그램 실행하고 숫자 치고 엔터치면 오류가 나버리네여...

대체 뭐가 잘못된건가여 흑