Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: yeah_2796 en 28 Mayo 2015, 23:17 pm



Título: ayuda con mi codigo, leer de un archivo en c
Publicado por: yeah_2796 en 28 Mayo 2015, 23:17 pm
hola estoy teniendo problemas econ mi codigo de una tarea. este es el enunciado:

Inicialmente su código debe leer un archivo llamado “reglas.txt”, este contiene en cada
línea alguna letra del abecedario (solo trabajaremos con letras mayúsculas) y al lado
de cada letra estará su respectiva codificación en binario. Serán las letras de la A
hasta la Z y los números de 0 al 4, así tenemos 32 caracteres, 5 bits para cada uno. El
archivo tiene la siguiente estructura:
<Letra> <Binario de 5 bits>Ejemplo reglas.txt:
G 00000
Z 11001
K 00011
.
.
.
.
1 01110
Fíjese que las letras en el archivo no necesariamente están en orden alfabético,
igualmente los números tampoco están en orden. La idea es que las cadenas de
entrada tengan un significado diferente según el archivo de reglas. Todas las letras y
números mencionados anteriormente deben estar incluidos en las reglas con su
respectiva codificación en binario.
Si la entrada fuera 1 00000110010111000000, se tiene que escribir el mensaje
decodificado en un archivo de salida, cada entrada es una línea en la salida. Para el
ejemplo anterior, en el archivo salida se escribe GZ1G. Todo esto con las reglas
definidas antes.

bueno se que se imprime en un archivo salida pero primero imprimo en la terminal para ir probando mi codigo

ahora esta es la parte de opcion 1 la opcion ya la tengo hecha aparte no se preocupen por eso.

la cadena de 50 digitos sera mi bin y como tengo que ir cortando de esa cadena cada 5 digitos creen un for que guardare ese valor que va a ir del 0 al 4 despues cambie los iteradores por que al segundo termino de 5 digitos lo corto de 5 a 9

uso el fscanf para leer del archivo reglas ya que siempre leera un caracter y la cadena, luego uso el strncmp para comparar el arreglo con la cadena del archivo reglas si son iguales devolvera 0 y si es 0 guarda el caracter en el arreglo sol.

ahora el problema qu etengo es que este es mi archivo reglas:

K 00101
J 10111
A 00100
X 10010

y si coloco opcion 1 00101 me imprime k pero tambien me imprime algo de basura y por ejemplo si coloco opcion 1 10111 que seria j , el codigo no hace nada , me pueden ayudar con esto que no se por que el codigo genera estos problemas.

Código
  1. #include <stdlib.h>
  2. #include <stdio.h>  
  3. #include <string.h>
  4.  
  5. int main (int argc, char *argv[]) {
  6. int i=0,j=0,k=0,l=0,m=0,n=0;
  7. char bin[50],str1[5],letra,op,ArrSol[10];
  8.  
  9. int caracter,ret;
  10. int v=0, z=5;
  11. char array[5];
  12. FILE *reglas;
  13.  
  14. scanf("%c %s",&op,bin);
  15.  
  16. if(op=='1'){ //Opción 1
  17. reglas=fopen(argv[1],"r"); //abriendo archivo reglas
  18.  
  19. if(reglas==NULL){
  20. printf("Error en el archivo");
  21. }else{
  22. while (!feof(reglas)){
  23. if((fscanf(reglas,"%c %s",&letra,str1))!=NULL){
  24. //printf("%c %s\n",letra,str1);//Probando que lee línea a línea
  25.  
  26. for (v=0;v<z;v++){
  27. array[v]=bin[v];
  28. l++;
  29. }
  30. v=l;
  31. z=z+5;
  32.  
  33.    ret=strncmp(array,str1,5);
  34. //printf("%d",ret);
  35. if (ret==0){    
  36. ArrSol[k]=letra;
  37. }
  38. k++;
  39. printf ("%s" , ArrSol);
  40. }
  41. }
  42. }  
  43. }
  44. }
  45.  
  46.  
  47. fclose(reglas);
  48.  
  49. return 0;
  50. }
  51.