gpt4 book ai didi

c - fgets 被传递

转载 作者:行者123 更新时间:2023-11-30 17:57:22 25 4
gpt4 key购买 nike

它是一个由 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;
}

最佳答案

问题是函数reiniciar() 中的fflush(stdin) 未被读取,因为该函数将返回前几行中的值。因此,我将其移至 reiniciar 函数中的 return 1 之前,并解决了该问题。

关于c - fgets 被传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12850513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com