Título: código morse es urgente Publicado por: jpp97 en 2 Febrero 2020, 17:58 pm tengo un programa que se utiliza para la codificación y decodificacion morse lo que cundo introduzco la palabra ni me la guarda ni me codifica y no me abre los dos archivo que ya tengo creados.... alguien puede ayudarme??? :(
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define MAX_LLETRES 15 //Metode per carregar el diccionari en una variable void carregar_diccionari(char abecedari[36][15]){ FILE *fitxer; char linia[10]; fitxer=fopen("morse.txt","r"); int cont=0; if (fitxer==NULL) { printf("No existeix el fitxer."); }else{ while ( !feof(fitxer) && cont != 36){ //ja que llegim lletra i morse hi han 74 elements perÚ aixÚ passa //perque hi ha linies de mes al fitxer. daquesta manera ens assegurem que //agafi lletra i morse que toquen fscanf(fitxer,"%s",linia); fscanf(fitxer,"%s",linia); int i =0, j=0; while(linia!='*'){ if(linia=='.'){ abecedari[cont][j]='.'; j++; }else if(linia=='-'){ abecedari[cont][j]='-'; j++; } i++; } abecedari[cont][j]='\0'; cont++; } } fclose (fitxer); } //per contar les letres de paraula perque no superi el maxim int numero_lletres(char linia[]){ int llarg =0; while(linia[llarg]!='\0'){ llarg++; } return llarg; } //per pasar de la lletra al morse void lletra_morse(char matriu[36][15], int fila){ for(int j = 0; matriu[fila][j]!='\0'; j++){ printf("%c", matriu[fila][j]); } printf(" "); } //metode per anar recorrent una paraula i anant imprimint el seu valor morse void traduccio_paraula_morse(char linia[], char abecedari[36][15]){ int contador_bucle_1=0; while(linia[contador_bucle_1]!='\0'){ if(linia[contador_bucle_1]>=65 && linia[contador_bucle_1]<=90){ lletra_morse(abecedari,linia[contador_bucle_1]-65); }else if (linia[contador_bucle_1]>=48 && linia[contador_bucle_1]<=57){ lletra_morse(abecedari,linia[contador_bucle_1]-22); }else if (linia[contador_bucle_1]>=97 && linia[contador_bucle_1]<=122){ lletra_morse(abecedari,linia[contador_bucle_1]-97); } contador_bucle_1++; } printf("\n"); } //guardem lletra a lletra la traduccio a un fitxer codificat void guardar_paraula_morse(char linia[], char abecedari[36][15]){ int contador_1=0; FILE* escriure; escriure = fopen("codificat.txt", "a"); while(linia[contador_1]!='\0'){ if(linia[contador_1]>=65 && linia[contador_1]<=90){ fprintf(escriure,"%s ",abecedari[linia[contador_1]-65]); }else if (linia[contador_1]>=48 && linia[contador_1]<=57){ fprintf(escriure,"%s ",abecedari[linia[contador_1]-22]); }else if (linia[contador_1]>=97 && linia[contador_1]<=122){ fprintf(escriure,"%s ",abecedari[linia[contador_1]-97]); }else if(linia[contador_1]=='\n'){ fprintf(escriure,"\n"); }else if(linia[contador_1]=='\t'){ fprintf(escriure,"\t"); }else if(linia[contador_1]==' '){ fprintf(escriure,"\t"); } contador_1++; } fclose(escriure); } //metode que per transformar tot un fitxer original a un de morse void codificar_fitxer(char abecedari[36][15]){ FILE *fitxer, *fit;//, *escriure; char linia[2]; fitxer=fopen("original.txt","r"); if (fitxer==NULL) { printf("No existeix el fitxer."); }else{ fit = fopen("codificat.txt", "w"); //si obrim amb mode w borrem contingut fitxer fclose(fit); while ( !feof(fitxer)){ fscanf(fitxer,"%c",&linia[0]); //llegim lletra a lletra linia[1]='\0'; //posem caracter de final de linia (sentinella) guardar_paraula_morse(linia,abecedari); linia[0]='\0'; //posem caracter de final de linia (sentinella) } } fclose (fitxer); } //retorna el valor ascii int valor_morse_abecedari(char linia[], char abecedari[36][15]){ int i, j; for(i=0; i<36;i++){ for(j=0; linia[j]!='\0' && abecedari[j]!='\0';j++){ if(linia[j]!=abecedari[j]){ break; } } if(linia[j]=='\0' && abecedari[j]=='\0'){ return i; } } return -1; } //metode per guardar paraules en morse a paraules de text normal void guardar_paraula(char linia[], char abecedari[36][15]){ FILE* escriure; escriure = fopen("decodificat.txt", "a"); char morse[15], text[2]; int cont = 0, cont2, valor; while(linia[cont]!='\0'){ cont2=0; while(linia[cont]!=' ' && linia[cont]!='\0'){ morse[cont2]=linia[cont]; cont2++; cont++; } if(cont2!=0){ morse[cont2]='\0'; valor= valor_morse_abecedari(morse,abecedari); cont++; if(valor!=-1){ if(valor>=0 && valor <= 25){ text[0]=valor+65; }else if(valor>=26 && valor <= 35){ text[0]=valor+22; } text[1]='\0'; if(linia[cont]=='\n'){ fprintf(escriure,"%s\n",text); break; }else if(linia[cont]=='\t'){ fprintf(escriure,"%s ",text); break; }else{ fprintf(escriure,"%s",text); } } }else{ cont++; } } fclose(escriure); } //metode per decodificar un fitxer codificat void decodificar_fitxer(char abecedari[36][15]){ FILE *fitxer, *fit;//, *escriure; char linia[1]; char morse[100]; int cont; fitxer=fopen("codificat.txt","r"); if (fitxer==NULL) { printf("No existeix el fitxer."); } else { fit = fopen("decodificat.txt", "w"); fclose(fit); while ( !feof(fitxer)){ linia[0]='.'; cont=0; while(linia[0]!='\t' && linia[0]!='\n' && !feof(fitxer) && linia[0]!='\0'){ fscanf(fitxer,"%c",&linia[0]); morse[cont]=linia[0]; cont++; } morse[cont]='\0'; guardar_paraula(morse,abecedari); } } fclose (fitxer); } int main() { char diccionari[36][15]; int opcio = -1; char paraula[100]; carregar_diccionari(diccionari); printf("Benvingut al codificador, decodificador de codi Morse.\n\n"); while(opcio != 0 ){ printf("\nQue vols fer a continuacio?\n\n"); printf("\n0-Sortir del decodificador morse\n"); printf("1-Codificar paraula\n"); printf("2-Codificar fitxer\n"); printf("3-Descodificar el fitxer\n"); scanf("%i", &opcio); switch(opcio){ case 1: //Cas per codificar una paraula printf("\nEscriu una paraula per a ser codificada en morse.\n"); scanf("%s", paraula); if(numero_lletres(paraula)> MAX_LLETRES){ printf("\nError, la paraula es massa llarga per a ser codificada.\n"); }else{ printf("\n\n"); traduccio_paraula_morse(paraula, diccionari); } break; case 2: printf("\nHas escollit codificar el fitxer. Ara podras veure el fitxer codificat.txt\n"); codificar_fitxer(diccionari); break; case 3: printf("\nHas escollit decodificar el fitxer. Ara podras veure el fitxer decodificat.txt\n"); decodificar_fitxer(diccionari); break; case 0: printf("\nFins un altre. Gracies per utilitzar el decodificador morse.\n"); break; default: printf("\nHas escollit una opcio no valida del menu.\n"); break; } } return 0; } Título: Re: código morse es urgente Publicado por: codX en 14 Febrero 2020, 01:49 am Hola, para escribir en un archivo debes usar
fopen("rutaAlarchivo.txt", "wt") para leer usas "r". Para agregar texto usas "at". |