Ver Mensaje Individual
  #4 (permalink)  
Antiguo 23/11/2015, 02:18
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Error con vectores?

Cita:
Iniciado por charliowow Ver Mensaje
Muchas gracias probare tocando ese for pero creo que el problema no es ese.
Cierto, tu programa tiene 2 errores. El primero no lo ví. No es un error tan obvio y desde el móvil no se puede probar el código.

Para que entiendas los dos errores vamos a analizar tu código:

Código C:
Ver original
  1. char frase[50];
  2. int c = 0;
  3. int z = 0;

Para empezar, tu código permite almacenar el resultado de 50 frases... hay que tener en cuenta que el primer resultado se almacenará en frase[0].

Por cierto, dado que frase va a almacenar un resultado numérico, lo suyo es que fuese un array de tipo int... si te ponen una frase de más de 255 caracteres va a darte resultados incorrectos.

Código C:
Ver original
  1. do{
  2.   scanf("%c", &letra);
  3.  
  4.    if (letra != 32 || letra != 46){
  5.     caracter++;
  6.    }
  7.    if (letra == 10){
  8.  
  9.       frase[c] = caracter;
  10.       caracter = 0;
  11.       c++;
  12.    }
  13. }while(letra != '.');

Si no se introduce un espacio o un punto, incrementas el contador de caracteres. El programa entiende que una frase termina con un salto de línea. En ese momento vuelca el valor del contador de caracteres en el array frase... recuerda que inicialmente c vale 0.

Como detalle en este punto... si introduces un punto, el programa sale del bucle, lo cual es lo esperado... pero fíjate que únicamente actualizas el array cuando introduces un salto de línea. Si pones un punto el resultado de la frase actual no se almacena en el array.

Código C:
Ver original
  1. for (z = 0; z <= c; z++){
  2.     printf("\nLa frase %d te %d caracters\n", z+1, frase[z]);
  3. }

Parte final de tu programa... iteras de 0 a c, es decir, si por ejemplo introduces 3 frases, z usará los valores: 0,1,2 y 3. Es decir, se ejecutarán las siguientes instrucciones:

Código C:
Ver original
  1. printf("\nLa frase %d te %d caracters\n", 1, frase[0]);
  2. printf("\nLa frase %d te %d caracters\n", 2, frase[1]);
  3. printf("\nLa frase %d te %d caracters\n", 3, frase[2]);
  4. printf("\nLa frase %d te %d caracters\n", 4, frase[3]);

¿No ves nada raro? Solo has introducido 3 frases pero el programa va a mostrar 4 resultados, de los cuales tres son correctos y uno incorrecto... casualmente el último.

En tu caso, incluyendo el error anterior que te he comentado, el efecto es que el programa te mostrará todos los resultados correctos menos el último que será incorrecto... si arreglas el primer error y pruebas el código verás que te entonces el programa te va a imprimir un resultado de más.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.