Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: grossgore en 27 Marzo 2018, 04:31 am



Título: Fscanf en lenguaje C
Publicado por: grossgore en 27 Marzo 2018, 04:31 am
Buenas noches... Mi problema es el siguiente
tengo un archivo de la siguiente manera
(id)           (0 o 1) ----> esto no esta en el archivo
6058267724  1
7594333595  1
5145356802  0
7756030586  0
2837767613  1

y quiero agarrar los id que tienen el valor 1, pero quiero agarrar es el id, el numero uno no lo quiero, busco almacenarlo en una matriz (bueno en el algoritmo que les muestro estoy usando un printf para asegurarme que estoy cogiendo los id)

Este codigo me regresa otros numeros que no son los del archivo y algunos traen el "-" a su izquierda,y por ejemplo si son 5 id con el numero 1, me imprime solo cuatro...
 
Código
  1. while (!feof(archivo_uno)){
  2.  
  3. fscanf (archivo_uno," %d%d",&cuentaf,&cerouno);
  4.  
  5. if ( cerouno == 1 ){
  6.  
  7. printf ( "\n cuenta: %d", cuentaf);
  8. }
  9. }
  10.  

INTENTE ASI PERO SOLO ME IMPRIME LOS UNO
Código
  1. while (!feof(archivo_uno)){
  2.  
  3. fscanf (archivo_uno," %d",&cuentaf);
  4.  
  5. if ( cuentaf == 1 ){
  6.  
  7. printf ( "\n cuenta: %d", cuentaf);
  8. }
  9. }
  10.  



Título: Re: Fscanf en lenguaje C
Publicado por: Kenji-chan en 27 Marzo 2018, 22:26 pm
veras tu error es que estas usando un tipo de dato int para almacenar un numero que sobre pasa la capacidad y el tipo de dato int solo almacena 2 bytes si la arquitectura de tu maquina es de x32 o 4 bytes si es de x64,

capacidad de almacenamiento de un int
2 bytes -32768 a 32767
4 bytes -2147483648 to 2147483647

6058267724 -> lo que intentas almacenar
2147483647 -> capacidad de un int x64

como ves el int es mucho mas pequeño de lo que le intentas almacenar


Título: Re: Fscanf en lenguaje C
Publicado por: grossgore en 28 Marzo 2018, 01:27 am
Vale perfecto, me di cuenta de ese error en el transcurso del dia... pero que tipo de dato  podria usar ??? intente con double y un long y me pasa igual... la unica manera que me los imprime correctamente es con char y no los quiero en un char :'v
osea de esta manera 
Código
  1. char  id [100];
  2. int cerouno;
  3.  
  4. while (!feof(archivo_uno)){
  5.  
  6. fscanf (archivo_uno,"\t%s \t%d",id,&cerouno);
  7.  
  8.  
  9. if ( cerouno == 1 ){
  10.               printf ( "cuenta:%s \n", id);
  11. }
  12. }
  13.  
  14.  

:'v


Título: Re: Fscanf en lenguaje C
Publicado por: Kenji-chan en 28 Marzo 2018, 01:39 am
a mi me funciona bien con double

Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[]) {
  4. int estado = 0;
  5. double id;
  6. FILE* fp;
  7.  
  8. fp = fopen("texto.txt", "r");
  9.  
  10. while(!feof(fp)){
  11. fscanf(fp, "%lf %d", &id, &estado);
  12. if(estado == 1){
  13. fprintf(stdout, "ID: %.0lf\n", id);
  14. }
  15. estado = 0;
  16. }
  17.  
  18. fclose(fp);
  19.  
  20. return 0;
  21. }
  22.  


Título: Re: Fscanf en lenguaje C
Publicado por: grossgore en 28 Marzo 2018, 02:04 am
A ya vi mi error, vale que retrasado soy jajajaja xD mi error estaba (no se como se le dice a eso pero son los porcientos que van dentro del printf o scanf que usas para definir el tipo de variable)o eso creo UwU... me fuiste de gran ayuda xD GRACIAS (y)