no puedo compilarlo, creo que el error esta en el carga con los punteros, pero nose como arreglarlo
MOD: El código debe estar publicado entre etiquetas de Código GeSHi
Código (c) [Seleccionar]
#include <stdio.h>
#include <string.h>
#define N 10000
typedef struct traductor{
char espanol[20];
char ingles[20];
int num;
}traductor;
traductor T[N];
traductor Auxi;
void CARGA(struct traductor T[N], int *i){
FILE *archivo1=fopen("espaingl.dat","r");
if(archivo1 == NULL){
printf("\nError en la apertura del archivo\n");
return;
}
while(!feof(archivo1)){
fscanf(archivo1,"%s %s %d",T[*i].espanol, T[*i].ingles, T[*i].num);
*i=*i+1;
}
fclose(archivo1);
}
int busqueda_dicotomica (struct traductor T[N], int *i, char pal_espanol[21]) {
int min, max, medio;
char palabra;
min=0;
max= *i-1;
medio= (min + max)/2;
while (strcmp(T[medio].espanol, pal_espanol)!=0 &&min<=max) {
if (strcmp(pal_espanol, T[medio].espanol) <0){
max=medio-1;}
else{
min=medio+1;}
medio= (min+max)/2; //fin si
}//fin mientras
if (strcmp(T[medio].espanol, pal_espanol) ==0)
return (medio); //se encontro la nueva palabra en el listado
else
return -1; //no se encontro la palabra en el listado
//finsi
}//fin busqueda dicotomica
int MENU(){
int op;
printf("--------------------------\n");
printf("BIENVENIDO AL TRADUCTOR\n\n");
printf("Elija la opcion que desee\n");
printf("(1)Ingles a Espanol\n");
printf("(2)Espanol a Ingles\n");
printf("(0)Cerrar");
printf("\n--------------------------\n");
printf("Opcion: ");
scanf("%d", &op);
while(op<0 || op>2){
printf("Error- opcion inexistente, elija entre 0 y 2: ");
scanf("%d", &op);
}
}
int MENU1(){
char w;
printf("\nElija opcion\n");
printf("T - Traducir al espanol\n");
printf("A - Agregar palabra\n");
printf("M - Mas buscadas\n");
printf("V - Volver\n");
printf("Opcion: ");
scanf(" %c",&w);
while(w!='t' && w!='a' && w!='m' && w!='v'){
printf("Error- Elija T, A, M o V: ");
scanf(" %c",&w);
}
}
int MENU2(){
char q;
printf("\nElija opcion\n");
printf("T - Traducir al ingles\n");
printf("A - Agregar palabra\n");
printf("M - Mas buscadas\n");
printf("V - Volver\n");
printf("Opcion: ");
scanf(" %c",&q);
while(q!='t' && q!='a' && q!='m' && q!='v'){
printf("Error- Elija T, A, M o V:");
scanf(" %c",&q);
}
}
void tradu(int opc, int *i) {
int p, j, temp,des,band1,band,medio;
char aux[20], la[20];
CARGA(T, &i);
temp = 0;
printf ("\nIntroduce la palabra que desea buscar: ");
fflush(stdin);
fgets(aux,N,stdin);
cambio (aux);
if(opc==1){
band=0;
while(band==0){
for (p=0 ; p<*i; p++) {
j = strcmp (aux, T[p].ingles);
if(j==0){
printf("La traduccion de %s es %s\n", T[p].ingles, T[p].espanol);
T[p].num=T[p].num+1;
band++;
}
}
}
if(band!=0){
printf("La palabra no se encontro, Si desea agregarla marque 1");
scanf(" %d", &des);
if(des==1){
strcpy(T[*i].ingles, aux);
printf("Ingrese la traduccion: ");
scanf(" %s", &la);
strcpy(T[*i].espanol, la);
T[*i].num=0;
*i=*i+1;
}
}
}
else {
band1=0;
while(band1==0){
medio=busqueda_dicotomica(T, &i, aux);
j = strcmp (aux, T[medio].espanol);
if (j == 0) {
printf ("La traduccion de %s es %s\n", T[medio].espanol, T[medio].ingles);
band1++;
T[medio].num=T[medio].num+1;
}
}
if(band!=0){
printf("La palabra no se encontro, Si desea agregarla marque 1 o cero para volver");
scanf(" %d", &des);
if(des==1){
strcpy(T[*i].espanol, aux);
printf("Ingrese la traduccion: ");
scanf(" %s", &la);
strcpy(T[*i].ingles, la);
T[*i].num=0;
*i=*i+1;
}
}
}
}
void cambio (char palabra[20]) {
int i;
for(i=0 ; i<N ; i++){
if (palabra[i] == '\n'){
palabra[i] = '\0';
}
}
}
void Agregar (int opc, int *i){
char Npal, la;
int p, j,bandera,bandera1,x,c,y,posicion,maximo;
CARGA (T, &i);
if (opc ==1){
printf("Ingrese la palabra que desea agregar");
scanf (" %s",&Npal );
bandera==0;
for(p=0 ; p<*i; p++){
j = strcmp (Npal, T[p].ingles);
if(j==0){
printf("La palabra ya existe");
bandera++;
}
}
if(bandera!=0){
strcpy(T[*i].ingles, Npal);
printf("Ingrese la traduccion: ");
scanf(" %s",la);
strcpy(T[*i].espanol, la);
T[*i].num=0;
*i=*i+1;
}
}
if (opc == 2){
printf("Ingrese la palabra que desea agregar");
scanf (" %s",&Npal );
bandera1=0;
for (c=0 ; c<*i; c++) {
j = strcmp (Npal, T[c].espanol);
if(j==0){
printf("La palabra ya existe");
bandera1++;
}
}
if(bandera1!=0){
strcpy(T[*i].ingles, Npal);
printf("Ingrese la traduccion: ");
scanf(" %s", &la);
strcpy(T[*i].ingles, la);
T[*i].num=0;
*i=*i+1;
}
}
//ordenamiento
for(x=0;x<*i-1;x++){
maximo= T[x].num;
posicion=x;
for(y=x+1;y<*i;y++){
if(T[x].num >maximo){
maximo=T[x].num;
posicion=y;
}
}
Auxi=T[posicion];
T[posicion]=T[x];
T[x]=Auxi;
}
}
void MasBuscada(int i){
int x,c,y,posicion,maximo;
for(x=0;x<i-1;x++){
maximo= T[x].num;
posicion=x;
for(y=x+1;y<i;y++){
if(T[x].num >maximo){
maximo=T[x].num;
posicion=y;
}
}
Auxi=T[posicion];
T[posicion]=T[x];
T[x]=Auxi;
}
printf("Las diez palabras mas buscadas fueron: \n");
for(c=0;c<10;c++){
printf("%s %s %d \n",T[c].espanol, T[c].ingles, T[c].num );
}
}
int main(void){
struct traductor T[N];
int opc,i=0;
char men1,men2;
CARGA(T,&i);
opc=MENU();
while(opc!=0){
switch(opc){
case 1:
printf("Elijio opcion: 1 \n\n");
men1=MENU1();
while(men1!='v'){
switch(men1){
case 't':
tradu(opc,&i);
break;
case 'a':
Agregar (opc, &i);
break;
case 'm':
MasBuscada(i);
break;
}
men1=MENU1();
}
break;
case 2:
printf("Elijio opcion: 2\n\n");
men2=MENU2();
while(men2!='v'){
switch(men2){
case 't':
tradu(opc,&i);
break;
case 'a':
Agregar (opc, &i);
break;
case 'm':
MasBuscada(i);
break;
}
men2=MENU2();
}
break;
}
opc=MENU();
}
printf("\n\nUsted ha finalizado el Programa\n");
return 0;
}
MOD: El código debe estar publicado entre etiquetas de Código GeSHi