Hola.
Mi programa debe reordenar una cadena de texto leída desde un archivo con base en una palabra que ingresa el usuario y que se ordena alfabéticamente.
Por ejemplo:
HOLA
Texto: VENCER EL TEMOR AL FRACASO
Nc = 4 *número de caracteres de la palabra dada.
HOLA
VENC
EREL
TEMO
RALF
RACA
SOXX
Y tiene que terminar así:
AHLO
CVNE
LE ER
OTME
FR LA
ARCA
XSXO
El código es este:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
main()
{
FILE *B;
char *A;
char **D;
char PC[16], Ord[16], N[90], archivo[50];
int Nc, Nct, Nf, i, j, w, x, y;
char z;
printf("Dame una palabra de 15 caracteres o menos:\n");
scanf("%s",PC);
Nc=strlen(PC);
printf("Indica el nombre del archivo escribiendo la extension\n");
scanf("\n%s",&archivo);
B=fopen(archivo,"r+t");
if((B=fopen(archivo,"r+t"))==NULL)
{
printf("\nError");
}
else
{
printf("\nArchivo valido\n");
while ((fscanf(B,"%s",&N))!=EOF)
{
printf("\n%s\n",N);
}
}
Nct=strlen(N);
Nf=Nct/Nc;
printf("\nNumero de caracteres en texto: %d",Nct);
printf("\nNumero de columnas: %d , Numero de filas: %d",Nc,Nf);
strcpy(Ord,PC);
for(i=1;i<Nc;i++)
{
for(j=0;j<Nc-i;j++)
{
if((tolower(Ord[j]))>(tolower(Ord[j+1])))
{
z=Ord[j];
Ord[j]=Ord[j+1];
Ord[j+1]=z;
}
}
}
printf("\nTu palabra es: %s\n",PC);
printf("Tu palabra ordenada es: %s\n",Ord);
strupr(PC);
for(i=0;i<Nc;i++)
{
printf(" %c ",PC);
}
puts("\n");
for(i=0; i<Nc; i++)
{
printf(" %c ",N);
}
puts("\n");
for(i=Nc; i<Nc+Nc; i++)
{
printf(" %c ",N);
}
A=&N[90];
A=(char*)malloc(Nf*Nc*sizeof(char));
for(i=0;i<Nf;i++)
{
for(j=0;j=Nc;j++)
{
A[w]=(i*Nc)+j;
}
}
D=(char**)malloc(Nf*sizeof(char*));
for(i=0;i=Nf;i++)
{
D=(char*)malloc(Nc*sizeof(char));
}
for(i=0;i<Nf;i++)
{
for(j=0;j<Nc;j++);
{
printf("%s",A);
}
}
for(i=0;i=Nf;i++)
{
free(D);
}
getchar();
getchar();
}
El problema es que, al crear el arreglo dinámico para cadenas, no lo lee y el programa deja de funcionar. Tampoco lee la matriz de caracteres.