Eliminar espacios en blanco al final de la salida en C

El siguiente código es para imprimir los elementos de una matriz en orden espiral. El progtwig funciona bien. El problema, sin embargo, es que el comstackdor en línea contra el cual estoy revisando el progtwig, no acepta espacios en blanco al final de la salida. ¿Podría alguien darme algunas ideas sobre cómo puedo sortear el último espacio en blanco que se agrega en la salida?

Para referencia, mi código es el siguiente (sí, los nombres de las variables son terribles. ¡Estoy trabajando para cambiar mi hábito de poner nombres de variables aleatorios!)

#include  int main() { int a[6][6]; int i, k = 0, l = 0, m=3, n=3, j; scanf("%d %d",&m, &n); for(i=0;i<m;i++) { for(j=0;j<n;j++) scanf("%d",&a[i][j]); } while (k < m && l < n) { for (i = l; i < n; ++i) printf("%d ", a[k][i]); k++; for (i = k; i < m; ++i) printf("%d ", a[i][n-1]); n--; if ( k = l; --i) printf("%d ", a[m-1][i]); m--; } if (l = k; --i) printf("%d ", a[i][l]); l++; } } return 0; } 

Entrada:

 1 2 3 4 5 6 7 8 9 

Salida:

 1 2 3 6 9 8 7 4 5{one extra space} 

¿Alguna manera de arreglar este problema? (También perdón por el formato terrible. ¡Primera pregunta en StackOverflow!)

Mirando tu código, esto for (el primero en el bucle while):

 for (i = l; i < n; ++i) printf("%d ", a[k][i]); 

siempre se ejecutarán al menos uno (porque l , proveniente de la condición de while ).

Entonces puedes hacer lo siguiente:

  • Siempre agregue el espacio delante del número
  • agregue un solo if marca solo por esta primera vez for -loop (use alguna bandera bool ).

Por ejemplo, algo como:

 bool first = true; while (k < m && l < n) { for (i = l; i < n; ++i) { if( ! first ) { printf(" %d", a[k][i]); } else { printf("%d", a[k][i]); first = false; } } // .... } 

Esta será una solución bastante eficiente y breve: if está en un solo bucle y la bandera se cumplirá solo una vez (evitará las fallas de caché).

Puedes poner una condición if en tus bucles for

 for (i = l; i < n; ++i) { printf("%d", a[k][i]); if(i < n-1) printf(" "); } 

Necesitas suprimir el espacio cuando no lo necesites. Puedes hacerlo así:

Agregue estas declaraciones:

 char *format = "%d"; int first_number = 1; 

Añade esto después de la primera impresión:

 if (first_number) { /* Now we want a space between numbers */ first_number = 0; format = " %d"; } 

Cambie su printf: s para usar la nueva variable:

  printf(format, ...); 

Puede establecer una variable boolean isFirst en true antes de imprimir cualquier cosa, y probarla antes de cada sentencia printf . Si isFirst , no imprima un espacio, pero establezca isFirst en false ; de lo contrario imprimir un solo espacio. Después de eso, continúa imprimiendo tu número sin un espacio.

Alternativa: en lugar de imprimir sus resultados inmediatamente, cree una matriz de results . Almacene sus resultados allí, y cuando haya terminado, imprima los resultados en un ciclo cerrado. Puede imprimir el primer número sin un espacio inicial, luego recorrer el rest e imprimirlo con un espacio inicial.

la statement printf (),

  printf("%d ", a[k][i]); 

resulta en espacio extra. utilizar

“% d” sin espacio o espacio de uso al principio como,

 " %d" 

Entonces al final no habrá espacio extra.
se trata de cómo usa el espacio en su printf (). use el espacio de manera que el espacio adicional no esté presente al final como lo deseaba.
Puedes usar código como este,

 while (k < m && l < n) { for (i = l; i < n; ++i) { if(l==0&&i==0) { printf("%d", a[k][i]); } else printf(" %d", a[k][i]); } k++; for (i = k; i < m; ++i) printf(" %d", a[i][n-1]); n--; if ( k < m) { for (i = n-1; i >= l; --i) printf(" %d", a[m-1][i]); m--; } if (l < n) { for (i = m-1; i >= k; --i) printf(" %d", a[i][l]); l++; } 

Una respuesta después de la respuesta aceptada:

Más bien que:

 while (k < m && l < n) { ... printf("%d ", a[k][i]); ... printf("%d ", a[i][n-1]); ... printf("%d ", a[m-1][i]); ... printf("%d ", a[i][l]); ... } 

Cambia el formato.

 const char *format = "%d"; while (k < m && l < n) { ... printf(format, a[k][i]); format = " %d"; ... printf(format, a[i][n-1]); ... printf(format, a[m-1][i]); ... printf(format, a[i][l]); ... } fputc('\n', stdout); // if desired.