Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: rodrigo_103 en 16 Septiembre 2012, 20:28 pm



Título: ayuda programa!!
Publicado por: rodrigo_103 en 16 Septiembre 2012, 20:28 pm
hola!!
estoy haciendo un programa y por mas que llevo horas dandole vueltas no encuentro el problema. necesito ayuda!
la idea es que reciba un texto como el que sigue y lo divida en vectores, uno por cada linea

r0001023, PÉREZ Juan, Física, 8
s25418-2, DOMÍNGUEZ Domingo, Literatura, 9
w0412346, FULANO Fidel, Física, 10
q23411-t, ZUTANO Jose, Geografía, 7

lo ejecuto de la forma ./cortastring<texto.csv

y me imprime:
23411-t, ZUTANO Jose, Geografía, 7

lo cual esta bastante bien, pero me falta la "q" que hay antes de todo eso y no entiendo por que no la toma en el vector

este es el codigo:
Código
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4.  
  5. int main (void)
  6. {
  7. /*Declaracion de variables*/
  8.  char verif;  
  9.  int i=0;
  10.  char matrix [1500][80];
  11.  
  12. /*Carga las variables, comprobando que no termine el archivo y que no se exeda el tamaño de filas de la matriz*/  
  13.  while(i<1500 && (verif=getchar())!=EOF)
  14.    {fgets(matrix[i],80,stdin);
  15.  
  16. /*imprimo el vector 3 para ver si todo salio bien*/
  17. puts(matrix[3]);
  18.  return 0;
  19. }
}


Título: Re: ayuda programa!!
Publicado por: avesudra en 16 Septiembre 2012, 20:48 pm
Buenas rodrigo_103 , me parece que es , por el getchar que tienes en el bucle porque se come siempre la primera letra , ¿no crees que sería mejor esto?
Código
  1. /*Carga las variables, comprobando que no termine el archivo y que no se exeda el tamaño de filas de la matriz*/  
  2.  while(i<1500 && fgets(matrix[i],80,stdin)!=NULL)
  3.    {
  4.     ++i;
  5.    }
Referencia de función fgets (http://www.cplusplus.com/reference/clibrary/cstdio/fgets/) , valores que retorna:
Return Value
On success, the function returns the same str parameter.
If the End-of-File is encountered and no characters have been read, the contents of str remain unchanged and a null pointer is returned.
If an error occurs, a null pointer is returned.
Use either ferror or feof to check whether an error happened or the End-of-File was reached.

¡Un saludo y bienvenido al foro!


Título: Re: ayuda programa!!
Publicado por: rodrigo_103 en 16 Septiembre 2012, 21:28 pm
Muchas gracias por tu rapida y completa respuesta y la bienvenida.

ya no tengo ese problema con las letras iniciales, pero ahora, cuando imprimo un vector, por ejemplo el 0, me imprime el que corresponderia que fuera el vector 1, si pido el 1, me imprime el 3, si pido el 2 me imprime el 5, si pido el 3 el 7 y asi sucesivamente.

en el caso del codigo que sigue imprime:

q23411-t, ZUTANO Jose, Geografía, 7

Código
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4.  
  5. int main (void)
  6. {
  7. /*Declaracion de variables*/
  8.  int i=0;
  9.  char matrix [1500][80];
  10.  
  11. /*Carga las variables, comprobando que no termine el archivo y que no se exeda el tamaño de filas de la matriz*/  
  12.  while(i<1500 && fgets(matrix[i],80,stdin)!=NULL)
  13.    {fgets(matrix[i],80,stdin);
  14.     i++;}
  15.  
  16.  
  17. /*imprimo el vector 1 para ver si todo salio bien*/
  18. puts(matrix[1]);
  19.  return 0;
  20. }


Título: Re: ayuda programa!!
Publicado por: avesudra en 16 Septiembre 2012, 21:52 pm
Es que has puesto dos fgets , con el que está en el bucle puesto ya basta. Si retorna NULL pues sale del bucle , porque le metes EOF que en windows es Ctrl + Z , pero si nó pones Ctrl + Z , entra al bucle y ejecuta dos fgets , por lo que a la misma variable de i le asignas su siguiente en la lista al ejecutar dos fgets. Pon solamente uno.


Título: Re: ayuda programa!!
Publicado por: rodrigo_103 en 16 Septiembre 2012, 21:58 pm
ahora funciona perfectamente!! mil gracias! :D