elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema Bucle C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema Bucle C  (Leído 3,660 veces)
P.AGCD

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Problema Bucle C
« en: 11 Julio 2011, 21:24 pm »

Hola compañeros, os escribo porque tengo una duda. He aprendido a programar en ADA, y ahora estoy aprendiendo con C mi duda es la siguiente:
En ADA existe un tipo de bucle que es

Loop   //inicia el bucle

Bloque de instrucciones

Exit when (condición) // sale del bucle cuando llegas a esa condición

Mi pregunta es como se hace este bucle en C.

gracias.


En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Problema Bucle C
« Respuesta #1 en: 11 Julio 2011, 21:28 pm »

Ese tipo de bucle es el do/while aunque con una pequeña diferencia:

Código
  1. do //Entra al bucle
  2. {
  3.  
  4.    //Codigo dentro del bucle
  5.  
  6. } while (condicion); //Mientras se cumpla la condicion, entra al bucle


En línea

P.AGCD

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Problema Bucle C
« Respuesta #2 en: 11 Julio 2011, 22:23 pm »

Gracias, pero ese bucle no me sirve.


El problema es que esta leyendo una linea de un fichero que es un registro del tipo:

struc {
char equipo1 [40];
char equipo1 [40];
int Resultado1;
int Resultado2;
}Linea;

En el fichero estan escritos de esta manera:

Equipo1 - Equipo2 : Resultado1 Resultado2

ej:

Marbella - Madrid : 9 3


Empiezo a leer caracter a caracter y lo guardo en linea.equipo1, lo que pasa es que cuando llego al - quiero que deje de guardar caracteres en linea.equipo1 y los ponga en linea.equipo2.

Si hago un do while, en este caso la condicion seria  while ('-') pero  cuando pase el guion seguira ejecutando el bucle. Yo necesito que cuando llegue al guion el bucle no vuelva a ejecutarse nunca.

espero que me hayais comprendido.
En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Problema Bucle C
« Respuesta #3 en: 11 Julio 2011, 22:31 pm »

En ADA ponés esa condición para salir, en el bucle do/while entonces, debes poner lo contrario:

Código
  1. while (variable != '-');

Mientras el caracter leído sea diferente a '-', seguirá con el bucle, cuando llegue a ese caracter, no entrará más.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema Bucle C
« Respuesta #4 en: 12 Julio 2011, 02:33 am »

Si vas a desarrollar un programa en C debes ajustarte a las facilidades que provee ese lenguaje olvidándote por el momento de las características de ADA y centrándote en el algoritmo, en tu caso este es:
mientras se pueda leer una linea de texto
   procesarla


Eso en C lo puedes implementar utilizando las funciones fopen/fclose para abrir/cerrar el archivo y fgets para leer la linea de texto. Un programa de ejemplo donde el proceso de la linea es simplemente imprimirla en la salida estándar es:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define LONG_MAX_LINEA  256
  5. #define NOM_ARCHIVO  "Entrada.txt"
  6.  
  7. int main(void)
  8. {
  9.   FILE *entrada;
  10.   char linea[LONG_MAX_LINEA];
  11.  
  12.   if ((entrada = fopen(NOM_ARCHIVO, "r")) == NULL){
  13.      perror(NOM_ARCHIVO);
  14.      return EXIT_FAILURE;
  15.   }
  16.  
  17.   while (fgets(linea, LONG_MAX_LINEA, entrada) != NULL)
  18.      fputs(linea, stdout);
  19.  
  20.   fclose(entrada);
  21.  
  22.   return EXIT_SUCCESS;
  23. }

En tu caso este es mas complicado, hay que conocer si el nombre de cada equipo es una sola palabra (por ejemplo "Barcelona") o bien pueden existir nombres con mas de una palabra (por ejemplo "La Coruña").

Formas de separar la linea hay muchas ya que puede basarse en diferentes funciones como strchr, strpbrk, strtok, etc.

Si la estructura del archivo de datos esta garantizada una forma separando las partes en base a una funcion propia es:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define LONG_MAX_LINEA  256
  6. #define NOM_ARCHIVO  "Entrada.txt"
  7.  
  8. struct partido {
  9.   char local[LONG_MAX_LINEA];
  10.   char visitante[LONG_MAX_LINEA];
  11.   int goles_loc;
  12.   int goles_vis;
  13. };
  14.  
  15. struct partido extraer(char const linea[]);
  16.  
  17. int main(void)
  18. {
  19.   FILE *entrada;
  20.   char linea[LONG_MAX_LINEA];
  21.   struct partido p;
  22.  
  23.   if ((entrada = fopen(NOM_ARCHIVO, "r")) == NULL){
  24.      perror(NOM_ARCHIVO);
  25.      return EXIT_FAILURE;
  26.   }
  27.  
  28.   while (fgets(linea, LONG_MAX_LINEA, entrada) != NULL){
  29.      p = extraer(linea);
  30.  
  31.      printf("Local: %s\n", p.local);
  32.      printf("Visitante: %s\n", p.visitante);
  33.      printf("Resultado: %d - %d\n", p.goles_loc, p.goles_vis);
  34.   }
  35.  
  36.   fclose(entrada);
  37.  
  38.   return EXIT_SUCCESS;
  39. }
  40.  
  41. struct partido extraer(char const linea[])
  42. {
  43.   struct partido p;
  44.   char *a;
  45.   char *b;
  46.  
  47.   /* Obtenemos la posicion de " - " */
  48.   a = strstr(linea, " - ");
  49.   sprintf(p.local, "%.*s", a - linea, linea);
  50.  
  51.   /* Obtenemos la posicion de " : " */
  52.   a += 3;
  53.   b = strstr(a, " : ");
  54.   sprintf(p.visitante, "%.*s", b - a,  a);
  55.  
  56.   /* Los goles los extraemos con sscanf */
  57.   sscanf(b + 3, "%d %d", &p.goles_loc, &p.goles_vis);
  58.  
  59.   return p;
  60. }

Pero si hay mas espacio blanco en las lineas se debe modificar la aproximacion para buscar solo los caracteres separadores ('-' y ':' en tu caso).

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con bucle While en vb 6.0
Programación Visual Basic
merlin 2 2,537 Último mensaje 14 Abril 2007, 02:39 am
por Sancho.Mazorka
Problema con bucle
Programación Visual Basic
mdg 0 1,237 Último mensaje 20 Noviembre 2007, 22:02 pm
por mdg
Duda (Parar bucle con dato boolean) [bucle while]
Java
Dem0ny 5 18,266 Último mensaje 17 Diciembre 2008, 17:43 pm
por Dem0ny
Problema con bucle y funcion feof
Programación C/C++
Franquieli 2 3,336 Último mensaje 30 Julio 2012, 21:21 pm
por Franquieli
[C++] Problema con bucle en Eclipse
Programación C/C++
HijoDePuta 4 2,779 Último mensaje 9 Agosto 2013, 20:14 pm
por HijoDePuta
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines