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

Error con vectores?

Estas en el tema de Error con vectores? en el foro de C/C++ en Foros del Web. Hola muy buenas a todos estoy haciendo este problema y no me acabo de salir. Tengo que hacer un programa que me diga cuantos caracteres ...
  #1 (permalink)  
Antiguo 22/11/2015, 07:01
 
Fecha de Ingreso: noviembre-2014
Mensajes: 11
Antigüedad: 9 años, 5 meses
Puntos: 0
Error con vectores?

Hola muy buenas a todos estoy haciendo este problema y no me acabo de salir. Tengo que hacer un programa que me diga cuantos caracteres tiene cada frase que se introduce por teclado, cuando no queramos introducir mas frases finalizamos con un punto. Tengo el cuerpo bien hecho diria pero no se si es ala hora de introducir los valores en el vector o que pasa exactamente que el resultado me sale desplazado en 1, es decir, en mi respuesta del ejercicio salen en la frase 1 los caracteres de la frase 2 i en la frase 2 los caracteres de la 3 , evidentemente la ultima frase me da un erro, es como si tubiera el vector desplazado pero me da la sensacion de que esta bien. Os paso el codigo. Muchisimas Gracias

Código C:
Ver original
  1. #include <stdio.h>
  2. void main(){
  3.  
  4. char letra;
  5. int caracter = 0;
  6. char frase[50];
  7. int c = 0;
  8. int z = 0;
  9.  
  10. printf("\n\nIntrodueix un text amb les linies que vulguis per finalitzar introdueix un punt\n\n");
  11.  
  12.  
  13.  
  14. do{
  15.   scanf("%c", &letra);
  16.  
  17.  if (letra != 32 || letra != 46){
  18.     caracter++;
  19.  }
  20.  if (letra == 10){
  21.  
  22.     frase[c] = caracter;
  23.     caracter = 0;
  24.     c++;
  25.  }
  26.  
  27. }while(letra != '.');
  28.  
  29. for (z = 0; z <= c; z++){
  30.     printf("\nLa frase %d te %d caracters\n", z+1, frase[z]);
  31. }
  32.  
  33. }
  #2 (permalink)  
Antiguo 22/11/2015, 09:00
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Error con vectores?

El problema que tienes es que c te dice el número total de frases, si en el último bucle pones como condición z<=c, entonces estas permitiendo que z sea igual a c, es decir, vas a imprimir un resultado de más.

Lo que dices que te sale el resultado de la segunda frase en el primer resultado me hace suponer que el ejercicio no lo has hecho tú, sin embargo te concedo el beneficio de la duda... En caso contrario no te habría respondido.

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.
  #3 (permalink)  
Antiguo 22/11/2015, 16:57
 
Fecha de Ingreso: noviembre-2014
Mensajes: 11
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Error con vectores?

Muchas gracias probare tocando ese for pero creo que el problema no es ese.

PD: el programa es mio qualquiera con buena base de c puede ver que no hay demasiado nivel XD
  #4 (permalink)  
Antiguo 23/11/2015, 02:18
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 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.

Etiquetas: char, int, 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 00:58.