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

[C] Leer solo la primera línea en un bucle

Estas en el tema de [C] Leer solo la primera línea en un bucle en el foro de C/C++ en Foros del Web. Hola, tengo que terminar una práctica y de momento lo llevo bien, salvo que quiero que se lea la primera línea de un .txt. Aquí ...
  #1 (permalink)  
Antiguo 05/12/2012, 11:08
 
Fecha de Ingreso: junio-2008
Mensajes: 22
Antigüedad: 15 años, 10 meses
Puntos: 0
[C] Leer solo la primera línea en un bucle

Hola, tengo que terminar una práctica y de momento lo llevo bien, salvo que quiero que se lea la primera línea de un .txt. Aquí está el código:

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. int esVocal(char c);
  4.  
  5. void main() {
  6.    
  7.     char anterior, actual;
  8.     int cont = 0, fin;
  9.    
  10.     FILE *archivo;
  11.     archivo = fopen("archivoEj3.txt", "r");
  12.     fscanf(archivo, "%c", &actual);
  13.            
  14.     while(fin != -1) {
  15.        
  16.         if(esVocal(actual) && anterior == ' ') {
  17.            
  18.             cont++;
  19.            
  20.         }
  21.        
  22.         anterior = actual;
  23.         fin = fscanf(archivo, "%c", &actual);
  24.        
  25.     }
  26.    
  27.     printf("Hay %d palabras que empiezan por vocal", cont);
  28.      
  29. }
  30.  
  31. int esVocal(char c) {
  32.    
  33.     int siVocal = 1;
  34.    
  35.     switch(c) {
  36.         case 'A' :
  37.         case 'E' :
  38.         case 'I' :
  39.         case 'O' :
  40.         case 'U' :
  41.         case 'a' :
  42.         case 'e' :
  43.         case 'i' :
  44.         case 'o' :
  45.         case 'u' : return 1;
  46.             break;
  47.         default : return 0;
  48.  
  49.     }
  50.    
  51. }

El .txt que abre contiene esto:

Cita:
Atencion: las ideas fundamentales de la ciencia son esencialmente sencillas y pueden ser expresadas en un lenguaje comprensible para todos. Albert Einstein

Esta linea ya no se debe leer..., esta solo para probar si para correctamente...
Pues bien, quiero que sólo lea la primera, ya que el programa cuenta las palabras que comienzan por inicial de la primera línea, las demás no las lee.

Gracias.
  #2 (permalink)  
Antiguo 05/12/2012, 12:29
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: [C] Leer solo la primera línea en un bucle

Hola! tenes dos errores:

1° en la condicion del while vos estas haciendo fin!=-1 el problema es que antes de esto a la variable fin no la inicializaste, por lo tanto puede traer problemas en la condicion. Deberias hacer:
Código C:
Ver original
  1. fin=fscanf(archivo, "%c", &actual);
  2.            
  3.     while(fin != -1) {
  4. .......
  5.  }

2° Lo mismo pasa con la variable anterior. Fijate que el txt empieza con la palabra "Atencion", empieza con una vocal, y al evaluar las condiciones del if va a ser falso por no inicializar la variable anterior; entonces cont no incrementa.
Código C:
Ver original
  1. char anterior=' ';
Tenes que tener en cuenta que cualquier variable no inicializada tiene "basura"



Para que solo lea una linea, la condicion del while debe ser:
Código C:
Ver original
  1. while(actual!='\n') /* osea distinte del salto de linea */
  2. {
  3. .......... /* codigo */
  4. }

Saludos
  #3 (permalink)  
Antiguo 05/12/2012, 18:27
 
Fecha de Ingreso: noviembre-2011
Mensajes: 50
Antigüedad: 12 años, 5 meses
Puntos: 3
Respuesta: [C] Leer solo la primera línea en un bucle

¿Pero si quieres que le la pura primera linea por que no lees caracter por caracter hasta un '\n' y de hay un break, o leer linea por linea, y que un contador inicializado en 0 valla aumentando por cada linea, despues de leer la primera linea valdria 1 y hacer que el bucle se cumpla cuando el contador valga 0 no mas, o ponerle otro break cuando contador valga 2?.

Etiquetas: bucle, int, primera, programa
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 05:35.