C/Visual C - Contador de espacios en blanco

 
Vista:
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Contador de espacios en blanco

Publicado por Javier (9 intervenciones) el 10/12/2020 19:42:06
El programa cosiste en contar los espacios en blanco de una frasee, he provado varias soluciones pero no consigo qque funciones. para una frase de 3 espacios en blanco me devuelve un numero grandisimo. Tampco se si la ruta de escape que le he puesto en el for, string frase es correcta. A ver si podeis ayudarme, gracias.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <string.h>
 
 
main()
{
 
char frase[]="";
int longitud;
int i;
int blancos;
blancos=0;
printf("Escribe una frase");
scanf("%[^\n]",frase);
longitud=strlen(frase);
for(i=0;i<=strlen(frase)&&frase[i]!='.';i++)
{
 
if (frase[i]==' ')
blancos++;
 
}
printf("El numero de espacios en blancos es: %i\n",blancos);
 
system("pause");
return 0;
 
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Contador de espacios en blanco

Publicado por Rodrigo (119 intervenciones) el 11/12/2020 03:20:48
Cambia

1
char frase[]="";

por

1
char frase[200];

el 200 puede ser cualquier valor grande, que sea capaz de contener lo que se ingresa.

Tal como esta, estas reservando memoria para 1 byte, por lo que la lectura hecha con scanf esta sobreescribiendo memoria que no has pedido.

Algo menor: remueve la variable longitud, que la asignas, pero no la usas para nada.

Vuelve para saber si el asunto de la memoria para el arreglo frase era el problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Contador de espacios en blanco

Publicado por Javier (9 intervenciones) el 11/12/2020 10:28:28
Pues si, el error era ese, habia que cambiar char frase[]="" por char frase[200].
Ahora una cosilla mas, la ruta de escape con el '.' deja de contar los espaios en blanco pero el programa continua, es decir te deja meter texto aunque ya no cuente los espacios en blanco. Como solucion le he puesto.
for(i=0;i<=strlen(frase)&&frase[i]!='getch()';i++). Y asi el programa continua perfectamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Contador de espacios en blanco

Publicado por Javier (9 intervenciones) el 11/12/2020 10:30:25
Pues si, el error era ese, habia que cambiar char frase[]="" por char frase[200].
Ahora una cosilla mas, la ruta de escape con el '.' deja de contar los espaios en blanco pero el programa continua, es decir te deja meter texto aunque ya no cuente los espacios en blanco. Como solucion le he puesto.
for(i=0;i<=strlen(frase)&&frase[i]!='getch()';i++). Y asi el programa continua perfectamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Contador de espacios en blanco

Publicado por Rodrigo (119 intervenciones) el 11/12/2020 16:30:10
Elimina completamente "&&frase[i]!='getch()'", creo que no esta aportando nada.

Tambien podrias cambiar i <= strlen(frase) ... por i < strlen(frase), cuando i == strlen(frase), estas evaluando la marca de fin de string y en realidad quieres usar la marca de fin de string para terminar, no para comparar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Contador de espacios en blanco

Publicado por Javier (9 intervenciones) el 11/12/2020 17:24:44
El programa tal y como me indicas funciona perfectamente. Ahora, tengo una duda: Cuando das intro estas haciendo que i==strlen(frase).
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Contador de espacios en blanco

Publicado por Rodrigo (119 intervenciones) el 11/12/2020 20:03:35
No, cuando das intro le dices al programa que continue, lo que escribiste (posiblemente incluido el cambio de linea) sera asignado a la variable que definiste para ello.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar