Iniciacion a C. Urgente!!!!

eva
26 de Enero del 2005
Estoy haciendo un pequeño programa que cuenta las palabras de una frase, pero solo las que tengan más de tres vocales distintas. Este es el trozo de código haber si alguien me dice en donde falla, es urgente gracias.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define blanco ' '
#define punto '.'

main(){
/*Declaración de variables */

int contA,contE,contI,contO,contU;
char frase[]="";/*para guardadar la frase*/
int cont;/*cuenta palabras */
char car;/*para leer los caracteres*/
int suma,tam,x;
contA=0; contE=0; contI=0; contO=0; contU=0;
printf(" Escriba una frase terminada en punto nn");
gets(frase);
if((frase[strlen(frase)-1])!= punto){
do{
printf("La frase debe terminar en punto n");
gets(frase);
}while((frase[strlen(frase)-1])!= punto);
}

/* tratamos la frase */
tam=0;
suma=0;
cont=0;
tam=strlen(frase);
for(x=0;x<tam;x++){
car=frase[x];
switch (car){
case 'a':contA=1;break;
case 'e':contE=1;break;
case 'i':contI=1;break;
case 'o':contO=1;break;
case 'u':contU=1;break;
case blanco:
suma=0;
suma=contA+contE+contI+contO+contU;
if(suma > 3){
cont++;}
contA=0; contE=0; contI=0; contO=0; contU=0;
break;
case punto:
suma=0;
suma=contA+contE+contI+contO+contU;
if(suma > 3){
cont++;}
contA=0; contE=0; contI=0; contO=0; contU=0;
break;
}
}
printf("El número de palabras con más de tres vocales es : %in",cont);

getch();
}

Puede que encuentres cosas un tanto repetitivas, pero son instrucciones que he metido para hacer pruebas

carmamezo
26 de Enero del 2005
Deberás crear frase con una extensión, esto es, debes indicarle al compilador el tamaño inical de frase.
Al hacer
char frase[]=""
no indicas el tamaño de frase, indicas que frase es un apuntador a un char, por tanto apuntas a una zona de memoria donde reside eventualmente la frase que te han insertado al hacer gets(frase), pero al empezar a cambiar las vbles, esa información se corrompe (por eso tu programa no funciona), lo que tienes que hacer es reservar un espacio de memoria para insertar la frase y no perderla:
char frase[100];
De esta manera reservas 100 caracteres en memoria para guardar la frase (usa lo que necesites), y no se corromperán.
Si lo que quieres es asignar espacio dinámicamente usa las funciones malloc() y free().
Un saludo