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;
}