comportamiento anormal de scanf

Tengo el siguiente código que escanea una matriz, w – ancho de la matriz, h – altura de la matriz.

Estoy usando Visual Studio 2010.

Cada vez que obtengo un char aumenta j por 2 (pongo el punto de quiebre y conozco este comportamiento).

int w = 0, h = 0; char map[21][21]; int i,j; scanf("%d%d", &w, &h); for(i = 1; i <= h; ++i){ for(j = 1; j <= w; ++j){ //fflush(stdin); scanf("%c",&map[i][j]); //fflush(stdin); } } 

¿Cuál puede ser la razón detrás de esto?

en el momento del escaneo estoy dando valor, w = 7, h = 5.

No veo ningún error en mi código … Por favor, ayúdenme.

El problema se debe a los caracteres '\n' (al presionar Enter ) que queda detrás de scanf .
Una forma de comer estos caracteres de nueva línea es colocar un ' ' antes de %c en scanf ;

  scanf(" %c",&map[i][j]); ^ | space 

Otra forma es usar un bucle para comer todo el \n por getchar()

  int ch; while((ch=getchar())!='\n' && ch != EOF ); 

Necesita omitir la nueva línea final de scanf anterior

No use fflush(stdin)

Utilizar:

 int c; while((c=getchar())!='\n' && c != EOF ); //eats newline came from scanf 

después de la llamada scanf

Aquí hay una respuesta a vuppala srikar . No me parece que su pregunta ” fscanf issue while reading input from text file [duplicate] ” sea un duplicado exacto:

En su pregunta, el scanf se realiza en un archivo de texto abierto ( fptr ).

En lugar de :

 while((fscanf(fptr,"%c %d",&c,&val))==2) { printf("%c %d\n",c,val); } 

que solo lee la primera línea del archivo, sugiero:

 char line [50] ; while (fgets( line,sizeof( line ),fptr )) if (sscanf(line,"%c %d",&c,&val)==2) { printf("%c %d\n",c,val); } 

Espero que mi respuesta llegue no demasiado tarde …