Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con Ciclo Infinito y Condicionales en C

Estas en el tema de Problema con Ciclo Infinito y Condicionales en C en el foro de C/C++ en Foros del Web. Intento cargar 1 valor entero a la variable F y de hay si el valor de la linea es 0 pase a la siguiente linea ...
  #1 (permalink)  
Antiguo 01/07/2011, 15:48
 
Fecha de Ingreso: mayo-2011
Mensajes: 15
Antigüedad: 13 años
Puntos: 0
Mensaje Problema con Ciclo Infinito y Condicionales en C

Intento cargar 1 valor entero a la variable F y de hay si el valor de la linea es 0 pase a la siguiente linea y asi sucesivamente hasta q cambie el valor para poder entrar en los condicionales


0 ----------------------------------------------------------->Operacion 0
0 ----------------------------------------------------------->Operacion 0
1 ----------------------------------------------------------->Operacion 1
18 04 2011 24 04 2011
DOBLE
3 ----------------------------------------------------------->Operacion 3
A 12345678 Alberto Martinez
A 13456789 Margarita Hernandez
N Andreina Martinez
0
0

Asi vendria siendo mas o menos la estructura del archivo


necesito que al pasar las Operacion 0 las 2 veces en una 3ra vuelta,
pase a Operacion 1 osea F==1 deberia entrar al condicional y cargar los 2 datos q se encuentran alli.. osea las fechas y DOBLE, ya despues la operacion que seguiria seria la 3 aun no e comenzado esa porq veo q siquiera entra al primer condicional =(

void Operacion(Usuario us, FILE *operacion)
{
Basura bs;
int F,i;
long int Cdd;
char P;
char A = "A";
char N = "N";
operacion = fopen("Operaciones.in","r");
if (operacion == NULL){
printf("No abrio el Archivo\n");
}else
{
fscanf(operacion,"%d",&F);
while (feof(operacion))
{
if (F==0)
{
ContF[1]++;
}
else
{
if (F==1)
{
fscanf(operacion,"%d",&us.CheckIn[1]);
printf("%d",us.CheckIn[1]);
fscanf(operacion,"%d",&us.CheckIn[2]);
fscanf(operacion,"%d",&us.CheckIn[3]);
fscanf(operacion,"%d",&us.CheckOut[1]);
fscanf(operacion,"%d",&us.CheckOut[2]);
fscanf(operacion,"%d",&us.CheckOut[3]);
fscanf(operacion,"%[^0-9]s",us.t_hab);
fscanf(operacion,"%d",&us.CantP);
fscanf(operacion,"%c",&P);
us.A++;
fscanf(operacion,"%d",&us.Ced);
fscanf(operacion,"%[^0-9]s",us.Nom);
fscanf(operacion,"%[^0-9]s",us.Apellido);

for (i = 0; i < (us.CantP-1); i++)
{
fscanf(operacion,"%c",&P);
if (P == A) //COmparacion de Caracteres
{
us.A++;
fscanf(operacion,"%d",&bs.CB);
fscanf(operacion,"%[^0-9]s",bs.NombreB);
fscanf(operacion,"%[^0-9]s",bs.ApellidoB);
}
else
{
us.N++;
fscanf(operacion,"%[^0-9]s",bs.NombreB);
fscanf(operacion,"%[^0-9]s",bs.ApellidoB);
}

}

}

/*if(F==2)
{
fscanf(operacion,"%d",&Cdd);
fscanf(operacion,"%d",&us.Hora);
}*/

if(F==3)
{

}
}
}
}fclose(operacion);

}
  #2 (permalink)  
Antiguo 01/07/2011, 23:47
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 1 mes
Puntos: 71
Respuesta: Problema con Ciclo Infinito y Condicionales en C

Veo errores en tu codigo como:

1)
Código C++:
Ver original
  1. char A = "A";//No se realiza así la asignacion de una variable char con comillas sino con apostrofes 'A'
  2. char N = "N";//Igual a la linea anterior

2)No veo la definición de la estructura Usuario, seria bueno que la colocaras y ver su contenido.

3)Usa el resaltado de código para que el que te ayude pueda leer mejor tu código.

Salva esos errores y posteas tus fallas.
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #3 (permalink)  
Antiguo 03/07/2011, 12:44
 
Fecha de Ingreso: mayo-2011
Mensajes: 15
Antigüedad: 13 años
Puntos: 0
Respuesta: Problema con Ciclo Infinito y Condicionales en C

Código C:
Ver original
  1. typedef char cadena[MAX];
  2. typedef int Fecha[3];
  3.  
  4. Fecha ContF;
  5.  
  6. typedef struct
  7. {
  8.     cadena Nom;
  9.     cadena Apellido;
  10.     long int Ced;
  11.     Fecha CheckIn;
  12.     Fecha CheckOut;
  13.     int Hora;
  14.     cadena t_hab;
  15.     int A;
  16.     int N;
  17.     int Cama_Ad;
  18.     int CantP;
  19.    
  20. }Usuario;
  21.  
  22. typedef struct
  23. {
  24.     long int CB;
  25.     cadena NombreB;
  26.     cadena ApellidoB;
  27. }Basura;
  28. void Operacion(Usuario us, FILE *operacion)
  29. {
  30.     Basura bs;
  31.     int F,i;
  32.     long int Cdd;
  33.     char P;
  34.     char A = "A";
  35.     char N = "N";
  36.     operacion = fopen("Operaciones.in","r");
  37.     if (operacion == NULL){
  38.     printf("No abrio el Archivo\n");
  39.     }else
  40.     {
  41.         fscanf(operacion,"%d",&F);
  42.     while (feof(operacion))
  43.     {
  44.     if (F==0)
  45.         {
  46.             ContF[1]++;
  47.         }
  48.         else
  49.         {
  50.             if (F==1)
  51.             {
  52.                 fscanf(operacion,"%d",&us.CheckIn[1]);
  53.                 printf("%d",us.CheckIn[1]);
  54.                 fscanf(operacion,"%d",&us.CheckIn[2]);
  55.                 fscanf(operacion,"%d",&us.CheckIn[3]);
  56.                 fscanf(operacion,"%d",&us.CheckOut[1]);
  57.                 fscanf(operacion,"%d",&us.CheckOut[2]);
  58.                 fscanf(operacion,"%d",&us.CheckOut[3]);
  59.                 fscanf(operacion,"%[^0-9]s",us.t_hab);
  60.                 fscanf(operacion,"%d",&us.CantP);
  61.                 fscanf(operacion,"%c",&P);
  62.                 us.A++;
  63.                 fscanf(operacion,"%d",&us.Ced);
  64.                 fscanf(operacion,"%[^0-9]s",us.Nom);
  65.                 fscanf(operacion,"%[^0-9]s",us.Apellido);
  66.                
  67.                 for (i = 0; i < (us.CantP-1); i++)
  68.                 {
  69.                     fscanf(operacion,"%c",&P);
  70.                     if (P == A) //COmparacion de Caracteres
  71.                     {
  72.                         us.A++;
  73.                         fscanf(operacion,"%d",&bs.CB);
  74.                         fscanf(operacion,"%[^0-9]s",bs.NombreB);
  75.                         fscanf(operacion,"%[^0-9]s",bs.ApellidoB);
  76.                     }
  77.                     else
  78.                     {
  79.                         us.N++;
  80.                         fscanf(operacion,"%[^0-9]s",bs.NombreB);
  81.                         fscanf(operacion,"%[^0-9]s",bs.ApellidoB);
  82.                     }
  83.  
  84.                 }
  85.                
  86.             }
  87.            
  88.             /*if(F==2)
  89.             {
  90.                 fscanf(operacion,"%d",&Cdd);
  91.                 fscanf(operacion,"%d",&us.Hora);
  92.             }*/
  93.            
  94.             if(F==3)
  95.             {
  96.                
  97.             }
  98.         }
  99.         }
  100.     }fclose(operacion);
  101.                            
  102. }


bueno hay esta la estructura etc pero sigo = juas necesito ayuda con esto urgente X_x
  #4 (permalink)  
Antiguo 03/07/2011, 13:30
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Problema con Ciclo Infinito y Condicionales en C

Fijate que la linea que carga el codigo en F solo lo haces una vea afuera del while.
fscanf(operacion,"%d",&F);

Esa liena deberia estar dentro del while, asi cuando terminas de procesar un opearcion lees el F de nuevo y seguis con la proxima.

Ademas dentro del F ==1 estoy viendo que lles mucha mas informacion de la uqe digiste que iba a llegar. Da toda la inpresion que metiste cosas del F == 3 ahi. Tene cuidado con eso.
  #5 (permalink)  
Antiguo 03/07/2011, 13:50
 
Fecha de Ingreso: mayo-2011
Mensajes: 15
Antigüedad: 13 años
Puntos: 0
Respuesta: Problema con Ciclo Infinito y Condicionales en C

Disculpa un error mio la operacion 1 conlleva todo los nombres y lo de mas el 3 que esta alli es la cantidad de personas
en la zona de los nombres la primera letra te dice si es A Adulto N Niño. los numeros vendrian ciendo el numero de identidad de la persona seguido por el nombre

0 ----------------------------------------------------------->Operacion 0
0 ----------------------------------------------------------->Operacion 0
1 ----------------------------------------------------------->Operacion 1
18 04 2011 24 04 2011
DOBLE
3
A 12345678 Alberto Martinez
A 13456789 Margarita Hernandez
N Andreina Martinez
0
0
  #6 (permalink)  
Antiguo 03/07/2011, 13:55
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Problema con Ciclo Infinito y Condicionales en C

Esta bien, pero probaste lo que te dije anteriormente. Tienes uqe leer el F cada vez que terminas de procesar, para saber cual es el nuevo codigo.

Algo asi:
Código C:
Ver original
  1. while (feof(operacion))
  2.     {
  3.       fscanf(operacion,"%d",&F);
  4.     if (F==0){ ......}
  5.     }
  #7 (permalink)  
Antiguo 03/07/2011, 14:10
 
Fecha de Ingreso: mayo-2011
Mensajes: 15
Antigüedad: 13 años
Puntos: 0
Respuesta: Problema con Ciclo Infinito y Condicionales en C

si si ya lo eh hecho pero aun asi nada :S

aver te coloco el codigo completo y te explico mas o menos que es lo que quiero hacer
  #8 (permalink)  
Antiguo 03/07/2011, 14:21
 
Fecha de Ingreso: mayo-2011
Mensajes: 15
Antigüedad: 13 años
Puntos: 0
Respuesta: Problema con Ciclo Infinito y Condicionales en C

Código C:
Ver original
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<time.h>
  5. #define MAX 100
  6. #define True 1
  7. #define False 0
  8.  
  9.  
  10. typedef float vec_precios[MAX];
  11. typedef int Cant_HabP[MAX];
  12. typedef char cadena[MAX];
  13. typedef int Fecha[3];
  14.  
  15. typedef struct
  16. {
  17.     float Presupuesto_I;
  18.     Fecha FechaIni;
  19.     int Hab;
  20.     int Pisos;
  21.     cadena Mat_Hab[MAX][MAX];
  22. }DatosH;
  23.  
  24. Fecha ContF;
  25.  
  26. typedef struct
  27. {
  28.     int N_Hab;
  29.     int N_Serv;
  30.     int N_Menu;
  31.     cadena vec_Hab;
  32.     cadena vec_Serv;
  33.     cadena vec_Menu;
  34.     vec_precios P_Hab;
  35.     vec_precios P_Serv;
  36.     vec_precios P_Menu;
  37.     cadena D_Menu;
  38.     cadena D_Serv;
  39.    
  40. }Precios;
  41.  
  42. typedef struct
  43. {
  44.     cadena Nom;
  45.     cadena Apellido;
  46.     long int Ced;
  47.     Fecha CheckIn;
  48.     Fecha CheckOut;
  49.     int Hora;
  50.     cadena t_hab;
  51.     int A;
  52.     int N;
  53.     int Cama_Ad;
  54.     int CantP;
  55.    
  56. }Usuario;
  57.  
  58. typedef struct
  59. {
  60.     long int CB;
  61.     cadena NombreB;
  62.     cadena ApellidoB;
  63. }Basura;
  64.  
  65.  
  66. void Llenar_RegH(DatosH dh, FILE *finicializar)
  67. {      
  68.                         Cant_HabP CHP;
  69.                         int i,j;
  70.                         //char pausa;
  71.                             finicializar = fopen("inicializar.in","r");
  72.                             if (finicializar == NULL){
  73.                             printf("No abrio el Archivo\n");
  74.                             }else{
  75.                                 fscanf(finicializar,"%f",&dh.Presupuesto_I);
  76.                                 printf("%f\n",dh.Presupuesto_I);
  77.                                 for (i = 0; i < 3; i++)
  78.                                 {
  79.                                 fscanf(finicializar,"%d",&dh.FechaIni[i]);
  80.                                 printf("%d ",dh.FechaIni[i]);
  81.                                 }
  82.                                 fscanf(finicializar,"%d",&dh.Hab);
  83.                                 printf("\n%d ",dh.Hab);
  84.                                 fscanf(finicializar,"%d",&dh.Pisos);
  85.                                 printf("%d\n",dh.Pisos);
  86.                                 for(i = 0; i < dh.Pisos; i++){
  87.                                     fscanf(finicializar,"%d",&CHP[i]);
  88.                                     printf("%d",CHP[i]);
  89.                                     for(j = 0; j < CHP[i] ; j++)
  90.                                     {
  91.                                     fscanf(finicializar,"%[^0-9]s",dh.Mat_Hab[i][j]);
  92.                                     printf("%s",dh.Mat_Hab[i][j]);
  93.                                     }
  94.                                 }
  95.                             }
  96.                         fclose(finicializar);
  97.                     }
  98.                    
  99. void precios(Precios ph, FILE *Preciosk)
  100. {
  101.                 int i;
  102.                 //char pausa;
  103.                 Preciosk = fopen("precios.in","r");
  104.                 if (Preciosk == NULL){
  105.                 printf("No abrio el Archivo\n");
  106.                 }else{
  107.                 fscanf(Preciosk,"%d",&ph.N_Hab);
  108.                 printf("%d ",ph.N_Hab);
  109.                 fscanf(Preciosk,"%d",&ph.N_Serv);
  110.                 printf("%d ",ph.N_Serv);
  111.                 fscanf(Preciosk,"%d",&ph.N_Menu);
  112.                 printf("%d",ph.N_Menu);
  113.                 for(i = 0; i < ph.N_Hab; i++)
  114.                 {
  115.                 fscanf(Preciosk,"%[^0-9]s",&ph.vec_Hab[i]);
  116.                 printf("%s",&ph.vec_Hab[i]);
  117.                 fscanf(Preciosk,"%f",&ph.P_Hab[i]);
  118.                 printf("%f",ph.P_Hab[i]);
  119.                 }
  120.                
  121.                 for (i = 0; i < ph.N_Serv; i++)
  122.                 {
  123.                     fscanf(Preciosk,"%[^0-9]s",&ph.vec_Serv[i]);
  124.                     printf("%s",&ph.vec_Serv[i]);
  125.                     fscanf(Preciosk,"%f",&ph.P_Serv[i]);
  126.                     printf("%f",ph.P_Serv[i]);
  127.                     fscanf(Preciosk,"%[^0-9]s",&ph.D_Serv[i]);
  128.                     printf("%s",&ph.D_Serv[i]);
  129.                 }
  130.                 for (i = 0; i < ph.N_Menu; i++)
  131.                 {
  132.                     fscanf(Preciosk,"%[^0-9]s",&ph.vec_Menu[i]);
  133.                     printf("%s",&ph.vec_Menu[i]);
  134.                     fscanf(Preciosk,"%f",&ph.P_Menu[i]);
  135.                     printf("%f",ph.P_Menu[i]);
  136.                     fscanf(Preciosk,"%[^0-9]s",&ph.D_Menu[i]);
  137.                     printf("%s",&ph.D_Menu[i]);
  138.                 }
  139.                
  140. }
  141. }
  142.  
  143.  
  144. void Operacion(Usuario us, FILE *operacion)
  145. {
  146.     Basura bs;
  147.     int F,i;
  148.     long int Cdd;
  149.     char P;
  150.     char A = "A";
  151.     char N = "N";
  152.     operacion = fopen("Operaciones.in","r");
  153.     if (operacion == NULL){
  154.     printf("No abrio el Archivo\n");
  155.     }else
  156.     {
  157.     while (feof(operacion))
  158.     fscanf(operacion,"%d",&F);
  159.     {
  160.     if (F==0)
  161.         {
  162.             ContF[1]++;
  163.         }
  164.         else
  165.         {
  166.             if (F==1)
  167.             {
  168.                 fscanf(operacion,"%d",&us.CheckIn[1]);
  169.                 printf("%d",us.CheckIn[1]);
  170.                 fscanf(operacion,"%d",&us.CheckIn[2]);
  171.                 fscanf(operacion,"%d",&us.CheckIn[3]);
  172.                 fscanf(operacion,"%d",&us.CheckOut[1]);
  173.                 fscanf(operacion,"%d",&us.CheckOut[2]);
  174.                 fscanf(operacion,"%d",&us.CheckOut[3]);
  175.                 fscanf(operacion,"%[^0-9]s",us.t_hab);
  176.                 fscanf(operacion,"%d",&us.CantP);
  177.                 fscanf(operacion,"%c",&P);
  178.                 us.A++;
  179.                 fscanf(operacion,"%d",&us.Ced);
  180.                 fscanf(operacion,"%[^0-9]s",us.Nom);
  181.                 fscanf(operacion,"%[^0-9]s",us.Apellido);
  182.                
  183.                 for (i = 0; i < (us.CantP-1); i++)
  184.                 {
  185.                     fscanf(operacion,"%c",&P);
  186.                     if (P == A) //COmparacion de Caracteres
  187.                     {
  188.                         us.A++;
  189.                         fscanf(operacion,"%d",&bs.CB);
  190.                         fscanf(operacion,"%[^0-9]s",bs.NombreB);
  191.                         fscanf(operacion,"%[^0-9]s",bs.ApellidoB);
  192.                     }
  193.                     else
  194.                     {
  195.                         us.N++;
  196.                         fscanf(operacion,"%[^0-9]s",bs.NombreB);
  197.                         fscanf(operacion,"%[^0-9]s",bs.ApellidoB);
  198.                     }
  199.  
  200.                 }
  201.                
  202.             }
  203.            
  204.             /*if(F==2)
  205.             {
  206.                 fscanf(operacion,"%d",&Cdd);
  207.                 fscanf(operacion,"%d",&us.Hora);
  208.             }*/
  209.            
  210.             if(F==3)
  211.             {
  212.                
  213.             }
  214.         }
  215.         }
  216.     }fclose(operacion);
  217.                            
  218. }
  219. main()
  220. {
  221.     Precios ph;
  222.     Usuario us;
  223.     DatosH dh;
  224.    
  225.     //Declaracion de Archivos
  226.     FILE *Preciosk, *operaciones, *sobrecarga, *inicializar;
  227.     FILE *reservaciones, *contabilidad, *reportes, *sobrecarg;
  228.    
  229.     //Archivos de Entrada
  230.     inicializar=fopen("inicializar.in","r");
  231.     Preciosk=fopen("precios.in","r");
  232.     operaciones=fopen("operaciones.in","r");
  233.     sobrecarga=fopen("sobrecarga.in","r");
  234.     //Archivos de Salida
  235.     reservaciones=fopen("reservaciones.out","r");
  236.     contabilidad=fopen("contabilidad.out","r");
  237.     reportes=fopen("reportes.out","r");
  238.     sobrecarg=fopen("sobrecarga.out","r");
  239.    
  240.    
  241.             //Llenar_RegH(dh,inicializar);
  242.             printf("\n");
  243.             //precios(ph,Preciosk);
  244.             Operacion(us,operaciones);
  245.  
  246. }

lo que quiero hacer es que
en la variable F valla cargando cada linea y vea si es 0,1,2,3,4,etc dependiendo de la cantidad de operaciones justo como en este formato de abajo
justo agarra 2 operacion 0
entra en condicional if(F==0) suma1 a contf y despues verifica de nuevo hasta
que consigue operacion 1
hay que agarre los datos que vendrian siendo la parte desde donde estan las 2 fechas 18 04 2011 y 24 04 2011
hasta la linea del nombre N Andreina Martinez sale del if(F==1) y vuelve a verificar si F==0 etc
en si hay mas operaciones pero apenas estoy con la primera que no logro hacer que funcione

0 ----------------------------------------------------------->Operacion 0
0 ----------------------------------------------------------->Operacion 0
1 ----------------------------------------------------------->Operacion 1
18 04 2011 24 04 2011
DOBLE
3
A 12345678 Alberto Martinez
A 13456789 Margarita Hernandez
N Andreina Martinez
0 ----------------------------------------------------------->Operacion 0
0 ----------------------------------------------------------->Operacion 0
3 -----------------------------------------------------------> Operacion 3
12345678 14:05
6 --------------------------------------------------------> operacion 6
12345678
2
CAM_A 6
CAJ_F 4
5 ------------------------------------------------__> operacion 5
4
ESP_C
LOM_M
JUG_L
MALTA
0
0
0
0
7 ----------------------------------------------------> operacion 7
1
b 18 04 2011 22 04 2011
0
0
4 --------------------------------------------------> operacion 4
12345678 10:50
8
8

Última edición por kurama19901; 03/07/2011 a las 14:32
  #9 (permalink)  
Antiguo 03/07/2011, 17:53
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Problema con Ciclo Infinito y Condicionales en C

Mira te corregi montones de errores que habia. Espero que no hagas un solo copiar y pegar y que te fijes en lo errores que tenias. Que compares los dos codigos, asi aprendes mas.

Saludos

Código C:
Ver original
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<time.h>
  5. #define MAX 100
  6. #define True 1
  7. #define False 0
  8.  
  9.  
  10. typedef float vec_precios[MAX];
  11. typedef int Cant_HabP[MAX];
  12. typedef char cadena[MAX];
  13. typedef int Fecha[3];
  14.  
  15. typedef struct
  16. {
  17.     float Presupuesto_I;
  18.     Fecha FechaIni;
  19.     int Hab;
  20.     int Pisos;
  21.     cadena Mat_Hab[MAX][MAX];
  22. }DatosH;
  23.  
  24. Fecha ContF;
  25.  
  26. typedef struct
  27. {
  28.     int N_Hab;
  29.     int N_Serv;
  30.     int N_Menu;
  31.     cadena vec_Hab;
  32.     cadena vec_Serv;
  33.     cadena vec_Menu;
  34.     vec_precios P_Hab;
  35.     vec_precios P_Serv;
  36.     vec_precios P_Menu;
  37.     cadena D_Menu;
  38.     cadena D_Serv;
  39.    
  40. }Precios;
  41.  
  42. typedef struct
  43. {
  44.     cadena Nom;
  45.     cadena Apellido;
  46.     long int Ced;
  47.     Fecha CheckIn;
  48.     Fecha CheckOut;
  49.     int Hora;
  50.     cadena t_hab;
  51.     int A;
  52.     int N;
  53.     int Cama_Ad;
  54.     int CantP;
  55.    
  56. }Usuario;
  57.  
  58. typedef struct
  59. {
  60.     long int CB;
  61.     cadena NombreB;
  62.     cadena ApellidoB;
  63. }Basura;
  64.  
  65.  
  66.  
  67. void Operacion(Usuario us)
  68. {
  69.     Basura bs;
  70.     int F,i;
  71.     long int Cdd;
  72.     char P;
  73.     char A = 'A';
  74.     char N = 'N';
  75.     us.A = us.N = 0;
  76.     FILE * operacion;
  77.     operacion = fopen("Operacion.in","r");
  78.     if (operacion == NULL) printf("No abrio el Archivo\n");
  79.     else  {
  80.         while (!feof(operacion)) {
  81.             if (fscanf(operacion,"%d",&F) < 1  ) break;
  82.  
  83.             //printf("F=%d\n",F);
  84.                     //scanf("%d",&i);
  85.             switch (F) {
  86.             case 0: ContF[1]++; break;
  87.             case 1:  
  88.                 fscanf(operacion,"%d",&us.CheckIn[1]);
  89.                 fscanf(operacion,"%d",&us.CheckIn[2]);
  90.                 fscanf(operacion,"%d",&us.CheckIn[3]);
  91.  
  92.                 fscanf(operacion,"%d",&us.CheckOut[1]);
  93.                 fscanf(operacion,"%d",&us.CheckOut[2]);
  94.                 fscanf(operacion,"%d",&us.CheckOut[3]);
  95.  
  96.                 fscanf(operacion,"%[^0-9]s",us.t_hab);
  97.                 fscanf(operacion,"%d",&us.CantP);
  98.                 for (i = 0; i < us.CantP; i++)
  99.                 {
  100.                     while ((P = fgetc(operacion) ) != 'N' && P != 'A'  );
  101.                     if (P == A) //Comparacion de Caracteres
  102.                     {
  103.                         us.A++;
  104.                         fscanf(operacion,"%ld", &(bs.CB));
  105.                         fscanf(operacion,"%s",bs.NombreB);
  106.                         fscanf(operacion,"%s",bs.ApellidoB);
  107.                                         printf("%s %s \n", bs.NombreB, bs.ApellidoB);
  108.                     //scanf("%d",&F);
  109.                     }
  110.                     else
  111.                     {
  112.                         us.N++;
  113.                         fscanf(operacion,"%s",bs.NombreB);
  114.                         fscanf(operacion,"%s",bs.ApellidoB);
  115.                                         printf("%s %s \n", bs.NombreB, bs.ApellidoB);
  116.                     }
  117.          
  118.                 }
  119.                 break; 
  120.              
  121.                 }
  122.         //while ((P = fgetc(operacion) ) != '\n');
  123.         }
  124.         fclose(operacion);
  125.     }
  126.                            
  127. }
  128.  
  129. int main()
  130. {
  131.     Precios ph;
  132.     Usuario us;
  133.     DatosH dh;
  134.    
  135.     //Declaracion de Archivos
  136.     FILE *Preciosk, *operaciones, *sobrecarga, *inicializar;
  137.     FILE *reservaciones, *contabilidad, *reportes, *sobrecarg;
  138.    
  139.     //Archivos de Entrada
  140.     //inicializar=fopen("inicializar.in","r");
  141.     //Preciosk=fopen("precios.in","r");
  142.     //operaciones=fopen("operaciones.in","r");
  143.     //sobrecarga=fopen("sobrecarga.in","r");
  144.     //Archivos de Salida
  145.     //reservaciones=fopen("reservaciones.out","r");
  146.     //contabilidad=fopen("contabilidad.out","r");
  147.     //reportes=fopen("reportes.out","r");
  148.     //sobrecarg=fopen("sobrecarga.out","r");
  149.    
  150.    
  151.             //Llenar_RegH(dh,inicializar);
  152.             printf("\n");
  153.             //precios(ph,Preciosk);
  154.             Operacion(us);
  155.  
  156. }
  #10 (permalink)  
Antiguo 04/07/2011, 23:49
 
Fecha de Ingreso: mayo-2011
Mensajes: 15
Antigüedad: 13 años
Puntos: 0
Respuesta: Problema con Ciclo Infinito y Condicionales en C

uhh gracias hermano ak un poco tarde pero a la mañana reviso mi codigo y le comparo y pruebo muchas gracias
  #11 (permalink)  
Antiguo 05/07/2011, 13:35
 
Fecha de Ingreso: mayo-2011
Mensajes: 15
Antigüedad: 13 años
Puntos: 0
Respuesta: Problema con Ciclo Infinito y Condicionales en C

juas ahora tengo errores con case 2, 5,6 nada mas y faltaria hacer el 8 q ese ya bueno jeje =) disculpa tanta molestia si puedes ayudarme con esto

Código C:
Ver original
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<time.h>
  5. #define MAX 100
  6. #define True 1
  7. #define False 0
  8.  
  9.  
  10. typedef float vec_precios[MAX];
  11. typedef int Cant_HabP[MAX];
  12. typedef int Numb_Serv[1];
  13. typedef char cadena[MAX];
  14. typedef int Fecha[3];
  15.  
  16. typedef struct
  17. {
  18.     float Presupuesto_I;
  19.     Fecha FechaIni;
  20.     int Hab;
  21.     int Pisos;
  22.     cadena Mat_Hab[MAX][MAX];
  23. }DatosH;
  24.  
  25. Fecha ContF;
  26.  
  27. typedef struct
  28. {
  29.     int N_Hab;
  30.     int N_Serv;
  31.     int N_Menu;
  32.     cadena vec_Hab;
  33.     cadena vec_Serv;
  34.     cadena vec_Menu;
  35.     vec_precios P_Hab;
  36.     vec_precios P_Serv;
  37.     vec_precios P_Menu;
  38.     cadena D_Menu;
  39.     cadena D_Serv;
  40.    
  41. }Precios;
  42.  
  43. typedef struct
  44. {
  45.     cadena Nom;
  46.     cadena Apellido;
  47.     long int Ced;
  48.     Fecha CheckIn;
  49.     Fecha CheckOut;
  50.     Fecha Reporte;
  51.     Fecha ReporteF;
  52.     int Hora;
  53.     int Hora2;
  54.     cadena t_hab;
  55.     int A;
  56.     int N;
  57.     int Cama_Ad;
  58.     int CantP;
  59.     int CantC;
  60.     int CantS;
  61.     Numb_Serv Num;
  62.     cadena Comida;
  63.     cadena Serv;
  64.     int CantR;
  65.     cadena TR;
  66.    
  67. }Usuario;
  68.  
  69. typedef struct
  70. {
  71.     long int CB;
  72.     cadena NombreB;
  73.     cadena ApellidoB;
  74.     char puntos;
  75. }Basura;
  76.  
  77.  
  78. void Operacion(Usuario us)
  79. {
  80.     Basura bs;
  81.     int F,i;
  82.     long int Cdd;
  83.     char P;
  84.     char A = 'A';
  85.     char N = 'N';
  86.     us.A = us.N = 0;
  87.     FILE *operacion;
  88.     operacion = fopen("Operaciones.in","r");
  89.     if (operacion == NULL) printf("No abrio el Archivo\n");
  90.     else  {
  91.         while (!feof(operacion)) {
  92.             if (fscanf(operacion,"%d",&F) < 1  ) break;
  93.  
  94.             //printf("%d\n",F);
  95.                   //scanf("%d",&i);
  96.             switch (F) {
  97.             case 0: ContF[1]++;
  98.             break;
  99.             case 1:  
  100.                 fscanf(operacion,"%d",&us.CheckIn[1]);
  101.                 printf("%d/",us.CheckIn[1]);
  102.                 fscanf(operacion,"%d",&us.CheckIn[2]);
  103.                 printf("%d/",us.CheckIn[2]);
  104.                 fscanf(operacion,"%d",&us.CheckIn[3]);
  105.                 printf("%d   ",us.CheckIn[3]);
  106.                 fscanf(operacion,"%d",&us.CheckOut[1]);
  107.                 printf("%d/",us.CheckOut[1]);
  108.                 fscanf(operacion,"%d",&us.CheckOut[2]);
  109.                 printf("%d/",us.CheckOut[2]);
  110.                 fscanf(operacion,"%d",&us.CheckOut[3]);
  111.                 printf("%d/",us.CheckOut[3]);
  112.                 fscanf(operacion,"%[^0-9]s",us.t_hab);
  113.                 printf("%s",us.t_hab);
  114.                 fscanf(operacion,"%d",&us.CantP);
  115.                 printf("%d\n",us.CantP);
  116.                 for (i = 0; i < us.CantP; i++)
  117.                 {
  118.                     while ((P = fgetc(operacion) ) != 'N' && P != 'A'  );
  119.                     if (P == A) //Comparacion de Caracteres
  120.                     {
  121.                         us.A++;
  122.                         printf("%c ",P);
  123.                         fscanf(operacion,"%ld", &bs.CB);
  124.                         printf("%ld ",bs.CB);
  125.                         fscanf(operacion,"%s",bs.NombreB);
  126.                         fscanf(operacion,"%s",bs.ApellidoB);
  127.                         printf(" %s %s \n", bs.NombreB, bs.ApellidoB);
  128.                     //scanf("%d",&F);
  129.                     }
  130.                     else
  131.                     {
  132.                         us.N++;
  133.                         fscanf(operacion,"%s",bs.NombreB);
  134.                         fscanf(operacion,"%s",bs.ApellidoB);
  135.                         printf("%s %s \n", bs.NombreB, bs.ApellidoB);
  136.                     }
  137.          
  138.                 }
  139.  
  140.                 break;
  141.                 case 2:
  142.                     fscanf(operacion,"%ld",&bs.CB);
  143.                     printf("%ld ",bs.CB);
  144.                     fscanf(operacion,"%d%c%d",&us.Hora,&bs.puntos,&us.Hora2);
  145.                     printf("%d%c%d",us.Hora,bs.puntos,us.Hora2);
  146.                 break;
  147.                 case 3:
  148.                     fscanf(operacion,"%ld", &bs.CB);
  149.                     printf("%ld ",bs.CB);
  150.                     fscanf(operacion,"%d%c%d",&us.Hora,&bs.puntos,&us.Hora2);
  151.                     printf("%d%c%d\n",us.Hora,bs.puntos,us.Hora2);
  152.                 break;
  153.                 case 4:                
  154.                     fscanf(operacion,"%ld",&bs.CB);
  155.                     printf("%ld ",bs.CB);
  156.                     fscanf(operacion,"%d%c%d",&us.Hora,&bs.puntos,&us.Hora2);
  157.                     printf("%d%c%d",us.Hora,bs.puntos,us.Hora2);
  158.                 break;
  159.                 case 5:
  160.                     fscanf(operacion,"%d",&us.CantC);
  161.                     printf("%d\n",us.CantC);
  162.                     for (i = 0; i < us.CantC; i++)
  163.                     {
  164.                     fscanf(operacion,"%s",us.Comida);
  165.                     printf("%s\n",us.Comida);
  166.                     }
  167.                 break;
  168.                 case 6:
  169.                     fscanf(operacion,"%ld", &bs.CB);
  170.                     printf("%ld\n",bs.CB);
  171.                     fscanf(operacion,"%d\n",&us.CantS);
  172.                     printf("%d\n",us.CantS);
  173.                     for (i = 0; i < us.CantS; i++)
  174.                     {
  175.                         fscanf(operacion,"%[^0-9]s",us.Serv);
  176.                         printf("%s\n",us.Serv);
  177.                     }
  178.                    
  179.                 break;
  180.                 case 7:
  181.                     fscanf(operacion,"%d",&us.CantR);
  182.                     printf("%d\n",us.CantR);
  183.                     for (i = 0; i < us.CantR ; i++)
  184.                     {  
  185.                     fscanf(operacion,"%s",us.TR);
  186.                     printf("%s ",us.TR);
  187.                     fscanf(operacion,"%d",&us.Reporte[1]);
  188.                     printf("%d ",us.Reporte[1]);
  189.                     fscanf(operacion,"%d",&us.Reporte[2]);
  190.                     printf("%d ",us.Reporte[2]);
  191.                     fscanf(operacion,"%d",&us.Reporte[3]);
  192.                     printf("%d  ",us.Reporte[3]);
  193.                     fscanf(operacion,"%d",&us.ReporteF[1]);
  194.                     printf("%d ",us.ReporteF[1]);
  195.                     fscanf(operacion,"%d",&us.ReporteF[2]);
  196.                     printf("%d ",us.ReporteF[2]);
  197.                     fscanf(operacion,"%d",&us.ReporteF[3]);
  198.                     printf("%d\n",us.ReporteF[3]);
  199.                     }
  200.                 break;
  201.                
  202.              
  203.                 }
  204.         //while ((P = fgetc(operacion) ) != '\n');
  205.         }
  206.         fclose(operacion);
  207.     }
  208.  
  209. }
  210.  
  211. main()
  212. {
  213.     Precios ph;
  214.     Usuario us;
  215.     DatosH dh;
  216.    
  217.     //Declaracion de Archivos
  218.     FILE *Preciosk, *operaciones, *sobrecarga, *inicializar;
  219.     FILE *reservaciones, *contabilidad, *reportes, *sobrecarg;
  220.    
  221.     //Archivos de Entrada
  222.     inicializar=fopen("inicializar.in","r");
  223.     Preciosk=fopen("precios.in","r");
  224.     operaciones=fopen("operaciones.in","r");
  225.     sobrecarga=fopen("sobrecarga.in","r");
  226.     //Archivos de Salida
  227.     reservaciones=fopen("reservaciones.out","r");
  228.     contabilidad=fopen("contabilidad.out","r");
  229.     reportes=fopen("reportes.out","r");
  230.     sobrecarg=fopen("sobrecarga.out","r");
  231.    
  232.    
  233.             //Llenar_RegH(dh,inicializar);
  234.             printf("\n");
  235.             //precios(ph,Preciosk);
  236.             Operacion(us);
  237.  
  238. }

y ak te dejo el archivo de entrada de operaciones.in completo
Cita:
0-----> Operacion 0
0-----> Operacion 0
1
18 04 2011 24 04 2011
DOBLE
3
A 12345678 Alberto Martinez
A 13456789 Margarita Hernandez
N Andreina Martine
0-----> Operacion 0
0-----> Operacion 0
3-----> Operacion 3
12345678 14:05
6-----> Operacion 6
12345678
2
CAM_A 6
CAJ_F 4
5-----> Operacion 5
4
ESP_C
LOM_M
JUG_L
MALTA
0-----> Operacion 0
0-----> Operacion 0
0-----> Operacion 0
0-----> Operacion 0
7 ---> Operacion 7
1
b 18 04 2011 22 04 2011
0-----> Operacion 0
0-----> Operacion 0
4 -----> Operacion 4
12345678 10:50
8-----> Operacion 8
8-----> Operacion 8
  #12 (permalink)  
Antiguo 05/07/2011, 15:58
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Problema con Ciclo Infinito y Condicionales en C

Tu error no esta en los case que dices. Tu error esta en el for del error 6. El problema es que te falta leer un entero despeus de la cadena de caracteres. Si corres tu programas te das cuenta facilmente porque el 6 que esta en la linea "CAM_A 6" de el archivo de datos lo toma como una nueva operacion.

Tenes que agregar un fscanf que lo lee, dentro del for.
  #13 (permalink)  
Antiguo 05/07/2011, 17:17
 
Fecha de Ingreso: mayo-2011
Mensajes: 15
Antigüedad: 13 años
Puntos: 0
Respuesta: Problema con Ciclo Infinito y Condicionales en C

bueno es que hice eso pero me imprime de esta manera
2 CAM_A 6
2 CAJ_F
5
4 algo asi me imprime cuando coloque de una manera parecida a la q me dices pero justo reviso
y en la parte del case 5?? es q al cargar y al imprimir por pantalla pasa demas deberia imprimir solo esto
4
ESP_C
LOM_M
JUG_L
MALTA


e imprime todo esto:

ESP_C
LOM_M
JUG_L
MALTA
0
0
0
0
7
1
b 18 04 2011 22 04 2011
  #14 (permalink)  
Antiguo 05/07/2011, 19:14
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Problema con Ciclo Infinito y Condicionales en C

Yo lo probe y me funciono bien...si quieres toma mi consejo.
Linea 175 176

fscanf(operacion,"%s %ld",us.Serv, &bs.CB );
printf("%s %ld\n",us.Serv,bs.CB);
  #15 (permalink)  
Antiguo 05/07/2011, 20:50
 
Fecha de Ingreso: mayo-2011
Mensajes: 15
Antigüedad: 13 años
Puntos: 0
Respuesta: Problema con Ciclo Infinito y Condicionales en C

si si ya solucionado ahora estoy viendo como hacer unas 3 cosas porq ahora tengo q pasar los datos a archivos de salida pero bueno ya coloco ak si necesito algun concejo u ayuda =) gracias por todo
  #16 (permalink)  
Antiguo 06/07/2011, 12:35
 
Fecha de Ingreso: mayo-2011
Mensajes: 15
Antigüedad: 13 años
Puntos: 0
Respuesta: Problema con Ciclo Infinito y Condicionales en C

Cita:
Iniciado por sam90 Ver Mensaje
Yo lo probe y me funciono bien...si quieres toma mi consejo.
Linea 175 176

fscanf(operacion,"%s %ld",us.Serv, &bs.CB );
printf("%s %ld\n",us.Serv,bs.CB);




men necesito una ayudita no consigo como hacer una busqueda secuencial en un vector de caracteres y compararlos con un string
osea quiero q al momento de cargar este dato
fscanf(operacion,"%[^0-9]s",us.t_hab);
agarrar la variable us.t_hab e ir comparandolas con los datos guardados en un vector q tengo
justo el dato q se carga en esa variable de mas arriba es esta palabra DOBLE
y en si al cargarla usar un motor de busqueda para buscar en un vector donde tengo posiciones ocupadas donde estan estos datos
INDIV
DOBLE
MATRI
CUADR
SUITE
y hay sacar en q posicion esta :S intente buscar de esta forma

Código C:
Ver original
  1. while ((i<=MAX)&&(ex==False))
  2.                 {
  3.                     if (pr.vec_Hab[i]==us.t_hab)
  4.                     {
  5.                         ex=True;
  6.                         pos=i;
  7.                     }
  8.                     i=i+1;
  9.                 }

pero nada en si es en el mismo codigo en el q me has ayudado =/
hermano si tenes msn o algo =) pasalo pr pv pa hay preguntarte algunas dudas =/

Última edición por kurama19901; 06/07/2011 a las 13:04
  #17 (permalink)  
Antiguo 06/07/2011, 14:33
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Problema con Ciclo Infinito y Condicionales en C

No se usa el == para comparar cadenas de caracteres. Lo que tienes que usar es strcmp. Esta va coparando caracter a caracter y devuelve cero si son iguales.

Código C++:
Ver original
  1. while ((i<=MAX)&&(ex==False))
  2.                 {
  3.                     if (strcmp(pr.vec_Hab[i],us.t_hab) == 0)
  4.                     {
  5.                         ex=True;
  6.                         pos=i;
  7.                     }
  8.                     i++;;
  9.                 }
  #18 (permalink)  
Antiguo 06/07/2011, 15:44
 
Fecha de Ingreso: mayo-2011
Mensajes: 15
Antigüedad: 13 años
Puntos: 0
Respuesta: Problema con Ciclo Infinito y Condicionales en C

en si ya habia probado con esa misma estructura despues de eso pero me tiraba este error
y probe con otras formas y nada =/

Proyecto.c:213: aviso: el paso del argumento 1 de ‘strcmp’ crea un puntero desde un entero sin una conversión

en si quiero que se compare la palabra q esta asignada en us.t_hab con las que estan en el vector pr.vec_Hab[i] y me tire la posicion ya q despues de eso necesito usar la posicion para usar en otro vector

Última edición por kurama19901; 06/07/2011 a las 16:07
  #19 (permalink)  
Antiguo 06/07/2011, 18:36
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Problema con Ciclo Infinito y Condicionales en C

Nada mas simple que leer el error. Parece ser que el primer argumento que estas pasando es un entero (pr.vec_Hab[i]).
Como tenes definida esa estructura?
  #20 (permalink)  
Antiguo 06/07/2011, 20:20
 
Fecha de Ingreso: mayo-2011
Mensajes: 15
Antigüedad: 13 años
Puntos: 0
Respuesta: Problema con Ciclo Infinito y Condicionales en C

typedef float vec_precios[MAX];
typedef int Cant_HabP[MAX];
typedef int Numb_Serv[1];
typedef char cadena[MAX];
typedef int Fecha[3];

typedef struct
{
int N_Hab;
int N_Serv;
int N_Menu;
cadena vec_Hab;
cadena vec_Serv;
cadena vec_Menu;
vec_precios P_Hab;
vec_precios P_Serv;
vec_precios P_Menu;
cadena D_Menu;
cadena D_Serv;

}Precios;

esta es la estructura
  #21 (permalink)  
Antiguo 07/07/2011, 09:58
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Problema con Ciclo Infinito y Condicionales en C

la variable vec_Hab la tienes definida como una cadena de caracteres. asi que vec_Hab[i] es un caracter y no una cadena para ser comparada.

Deberias hacer:

cadena vec_Hab[100];

Como estabas haciendo para cargar esos valores? Deberia fallar eso tambien

Etiquetas: condicionales, infinito, ciclos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:25.