Programa que ignora un if ... (Problema del compilador?)
Publicado por Jorge (24 intervenciones) el 22/07/2021 20:29:24
Hola bueno estoy haciendo un codigo para ordenar alfabeticamente unas cadenas, aun estoy comenzando osea que estoy probando el programa con palabras sencillas, el problema ocurre que el programa que hago literalmente ignora un if y hace algo que no deberia hacer, aca lo explico
las cadenas de ejemplo que meti fueron HOLA, ADIOS Y COMO (son 3)
#include <stdio.h>
#include <string.h>
// PROGRAMA ORDENAR CADENAS DE TEXTO
void comparacion(char CAD[][50],int LUGAR_1,int LUGAR_2);
main()
{
char CADENAS[50][50];
int N_CADENAS=0;
printf("INGRESA EL NUMERO DE CADENAS QUE METERAS: \n ");
scanf("%d",&N_CADENAS); fflush(stdin);
for(int A=0;A<N_CADENAS;A++){
printf("INGRESA LA CADENA %d: \n \t",A+1);
gets(CADENAS[A]);
}
// SE ORDENAN POR SELECCION
for(int P=0;P<N_CADENAS-1;P++){
for(int Q=P+1;Q<N_CADENAS;Q++){
comparacion(CADENAS,P,Q); // FUNCION ENTREGA CADENAS ORDENADAS
}
}
printf("\n \t LAS CADENAS ULT SON: \n");
for(int X=0;X<N_CADENAS;X++) puts(CADENAS[X]);
}
void comparacion(char CAD[][50],int LUGAR_1,int LUGAR_2){
int cta=0;
char AUX_CAD[50];
// AQUI OCURRE EL PROBLEMA, LA SEGUNDA VEZ QUE VIENE AQUI
// CAD[LUGAR_1][cta] ES IGUAL A 'A' Y CAD[LUGAR_2][cta]= 'C'
// ENTONCES A > C NO SE CUMPLE Y AUN ASI ENTRA EL IF
while(1){
if(CAD[LUGAR_1][cta] > CAD[LUGAR_2][cta]){
strcpy(AUX_CAD,CAD[LUGAR_1]);
strcpy(CAD[LUGAR_1],CAD[LUGAR_2]);
strcpy(CAD[LUGAR_2],AUX_CAD);
break;
}
if(CAD[LUGAR_1][cta]=='\0'&&CAD[LUGAR_2][cta]=='\0') break;
if(CAD[LUGAR_1][cta]=='\0'&&CAD[LUGAR_1][cta]!='\0') break;
else if(CAD[LUGAR_1][cta]!='\0'&&CAD[LUGAR_1][cta]=='\0'){
strcpy(AUX_CAD,CAD[LUGAR_1]);
strcpy(CAD[LUGAR_1],CAD[LUGAR_2]);
strcpy(CAD[LUGAR_2],AUX_CAD);
break;
}
cta++;
}
}
las cadenas de ejemplo que meti fueron HOLA, ADIOS Y COMO (son 3)
#include <stdio.h>
#include <string.h>
// PROGRAMA ORDENAR CADENAS DE TEXTO
void comparacion(char CAD[][50],int LUGAR_1,int LUGAR_2);
main()
{
char CADENAS[50][50];
int N_CADENAS=0;
printf("INGRESA EL NUMERO DE CADENAS QUE METERAS: \n ");
scanf("%d",&N_CADENAS); fflush(stdin);
for(int A=0;A<N_CADENAS;A++){
printf("INGRESA LA CADENA %d: \n \t",A+1);
gets(CADENAS[A]);
}
// SE ORDENAN POR SELECCION
for(int P=0;P<N_CADENAS-1;P++){
for(int Q=P+1;Q<N_CADENAS;Q++){
comparacion(CADENAS,P,Q); // FUNCION ENTREGA CADENAS ORDENADAS
}
}
printf("\n \t LAS CADENAS ULT SON: \n");
for(int X=0;X<N_CADENAS;X++) puts(CADENAS[X]);
}
void comparacion(char CAD[][50],int LUGAR_1,int LUGAR_2){
int cta=0;
char AUX_CAD[50];
// AQUI OCURRE EL PROBLEMA, LA SEGUNDA VEZ QUE VIENE AQUI
// CAD[LUGAR_1][cta] ES IGUAL A 'A' Y CAD[LUGAR_2][cta]= 'C'
// ENTONCES A > C NO SE CUMPLE Y AUN ASI ENTRA EL IF
while(1){
if(CAD[LUGAR_1][cta] > CAD[LUGAR_2][cta]){
strcpy(AUX_CAD,CAD[LUGAR_1]);
strcpy(CAD[LUGAR_1],CAD[LUGAR_2]);
strcpy(CAD[LUGAR_2],AUX_CAD);
break;
}
if(CAD[LUGAR_1][cta]=='\0'&&CAD[LUGAR_2][cta]=='\0') break;
if(CAD[LUGAR_1][cta]=='\0'&&CAD[LUGAR_1][cta]!='\0') break;
else if(CAD[LUGAR_1][cta]!='\0'&&CAD[LUGAR_1][cta]=='\0'){
strcpy(AUX_CAD,CAD[LUGAR_1]);
strcpy(CAD[LUGAR_1],CAD[LUGAR_2]);
strcpy(CAD[LUGAR_2],AUX_CAD);
break;
}
cta++;
}
}
Valora esta pregunta


0