pasar caracteres a un array
tengo el fallo en el programa que me imprime el caracter que le introduzco fuerra d los elementos de la array.
Código
#include <stdio.h>
#include <stdlib.h>
#define MAXLISTA 5
void CrearListaOrdenada(char *l);
void InsertarEnOrden(char *l,char elemento);
void MostrarLista(char *l);
int main()
{
char l[MAXLISTA],elem;
int i;
CrearListaOrdenada(l);
printf("nPasando Bateria de Pruebas...");
printf("nnPRUEBA 1: Creando lista propia...");
for(i=0;i<MAXLISTA;i++)
{
printf("nIntroduzca elemento %i de la lista: ",i);
scanf("%c",&elem);
InsertarEnOrden(l,elem);
MostrarLista(l);
printf("%c",elem);
}
system("PAUSE");
return 0;
}
void CrearListaOrdenada(char *l) // inicializar todos los valores de la lista a '*'.
{
int i;
char elem;
for(i=0;i<MAXLISTA;i++)
{
l[i]='*';
elem=l[i];
}
for(i=0;i<MAXLISTA;i++)
{
printf("[%c] ",l[i]);
}
}
void InsertarEnOrden(char *l,char elemento)
{
int i,j;
for(i=1;i<MAXLISTA;i++)
{
elemento=l[i];
j=i-1;
while(j<=0 && elemento<l[j])
{
l[j+1]=l[j];
j--;
}
l[j+1]=elemento;
}
}
void MostrarLista(char *l)
{
int i;
for(i=0;i<MAXLISTA;i++)
{
printf("[%c]",l[i]);
}
}
Código
#include <stdio.h>
#include <stdlib.h>
#define MAXLISTA 5
void CrearListaOrdenada(char *l);
void InsertarEnOrden(char *l,char elemento);
void MostrarLista(char *l);
int main()
{
char l[MAXLISTA],elem;
int i;
CrearListaOrdenada(l);
printf("nPasando Bateria de Pruebas...");
printf("nnPRUEBA 1: Creando lista propia...");
for(i=0;i<MAXLISTA;i++)
{
printf("nIntroduzca elemento %i de la lista: ",i);
scanf("%c",&elem);
InsertarEnOrden(l,elem);
MostrarLista(l);
printf("%c",elem);
}
system("PAUSE");
return 0;
}
void CrearListaOrdenada(char *l) // inicializar todos los valores de la lista a '*'.
{
int i;
char elem;
for(i=0;i<MAXLISTA;i++)
{
l[i]='*';
elem=l[i];
}
for(i=0;i<MAXLISTA;i++)
{
printf("[%c] ",l[i]);
}
}
void InsertarEnOrden(char *l,char elemento)
{
int i,j;
for(i=1;i<MAXLISTA;i++)
{
elemento=l[i];
j=i-1;
while(j<=0 && elemento<l[j])
{
l[j+1]=l[j];
j--;
}
l[j+1]=elemento;
}
}
void MostrarLista(char *l)
{
int i;
for(i=0;i<MAXLISTA;i++)
{
printf("[%c]",l[i]);
}
}
-En la función main deberías poner está línea antes de scanf para que no salgan resultados no deseados:
fflush(stdin);//Pone a punto la función scanf liberando la memoria
-En la función CrearListaOrdenada la variable de caracter elem no hace nada y por lo tanto sobra
-El algoritmo de la función InsertarEnOrden está muy confuso y funciona mal, deberías seguir estos pasos:
1. Empezando por el final se recorren las posiciones del array
2. Si el valor de la posición anterior a la actual es mayor que el elemento o está vacio, el valor de la posición anterior pasa a la posición actual y el valor de la posición anterior pasa a ser igual que el elemento
fflush(stdin);//Pone a punto la función scanf liberando la memoria
-En la función CrearListaOrdenada la variable de caracter elem no hace nada y por lo tanto sobra
-El algoritmo de la función InsertarEnOrden está muy confuso y funciona mal, deberías seguir estos pasos:
1. Empezando por el final se recorren las posiciones del array
2. Si el valor de la posición anterior a la actual es mayor que el elemento o está vacio, el valor de la posición anterior pasa a la posición actual y el valor de la posición anterior pasa a ser igual que el elemento