M x N
它是一个整数矩阵。
- 我要求自动填充或手动填充。
- 我选择自动,它会填充。
- 然后我测试矩阵以查看其列 (1) 或行 (0) 是否为回文(例如:)
1 2 9 2 1
。 - 我要求重新启动或退出。
如果我重新启动,矩阵会自动填充,这就是我不明白为什么会发生的原因,因为fgets
它在 while 内并且应该始终执行。
函数llenar_matriz
,第 4 行。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define COL 5
#define FIL 5
int reiniciar( void );
void llenar_matriz( int mat[ FIL ][ COL ] );
void imprimir_matriz( int mat[ FIL ][ COL ] );
int matriz_palindrome( int mat[ FIL ][ COL ], int tipo );
int main () {
do {
int mat[ FIL ][ COL ] = {0};
llenar_matriz( mat );
if ( matriz_palindrome( mat, 1 ) ) {
puts( "Las columnas de la matriz son palindromos" );
}
else {
puts( "Las columnas de la matriz no son todas palindromos" );
}
} while( reiniciar() );
system( "pause" );
}
void imprimir_matriz( int mat[ FIL ][ COL ] ) {
int i, j;
for( i = 0; i < FIL; i ++ ) {
for( j = 0; j < COL; j++ ) {
printf( "%4d", mat[ i ][ j ] );
}
printf( "\n" );
}
}
void llenar_matriz( int mat[ FIL ][ COL ] ) {
char rta[3];
int i, j;
printf( "Desea llenar la matriz automaticamente? Si / No\n" );
while( fgets( rta, 3, stdin ) == NULL ) {
fflush( stdin );
printf( "Ocurrio un error al obtener su respuesta. Intente nuevamente.\n" );
}
if( strcmp( rta, "No" ) == 0 | strcmp( rta, "no" ) == 0 ) {
for( i = 0; i < FIL; i++ ) {
for( j = 0; j < COL; j++ ) {
printf( "Ingrese el valor de la posicion %d, %d\n", i+1, j+1 );
while( scanf( "%d", &mat[ i ][ j ] ) == NULL ) {
fflush( stdin );
puts( "Hubo un error al obtener su respuesta. Intente nuevamente" );
}
imprimir_matriz( mat );
}
}
}
else {
srand( time(NULL) );
for( i = 0; i < FIL; i++ ) {
for( j = 0; j < COL; j++ ) {
mat[ i ][ j ] = rand() % 99 + 1;
}
}
imprimir_matriz( mat );
}
fflush( stdin );
}
int reiniciar( void ) {
char rta[3];
int centinel = 0;
puts( "Desea reiniciar la prueba? Si / No" );
do{
while( fgets( rta, 3, stdin ) == NULL ) {
fflush( stdin );
printf( "Ocurrio un error al obtener su respuesta. Intente nuevamente.\n" );
}
if( strcmp( rta, "Si" ) == 0 | strcmp( rta, "si" ) == 0 ) {
return 1;
}
else {
if( strcmp( rta, "No" ) == 0 | strcmp( rta, "no" ) == 0 ) {
return 0;
}
else {
printf( "Respuesta incorrecta. Intente nuevamente.\n" );
centinel = 1;
}
}
fflush( stdin );
} while( centinel );
}
int matriz_palindrome( int mat[ FIL ][ COL ], int tipo ) {
int i, j;
if( tipo == 0 ) {
for( i = 0; i < FIL; i++ ) {
for( j = 0; j <= COL/2; j++ ) {
if( mat[ i ][ j ] != mat[ i ][ COL - j - 1] ) {
return 0;
}
}
}
}
if( tipo == 1 ) {
for( i = 0; i < COL; i++ ) {
for( j = 0; j <= FIL/2; j++ ) {
if( mat[ j ][ i ] != mat[ FIL - j - 1 ][ i ] ) {
return 0;
}
}
}
}
return 1;
}