Ir para o conteúdo
jamirooo

[Resolvido] contar vogais numa string

Mensagens Recomendadas

jamirooo    0
jamirooo

Boas...tou a iniciar-me no C e tenho o seguinte programinha que é suposto contar as vogais de uma String mas só conta as vogais da primeira palavra dessa String...se alguém me soubesse dar uma ajudinha...Obrigado desde já.

int conta_a (char str [ ]){
int i, count=0;
for(i=0; str[i]!='\0'; i++)
if (str[i]=='a'||str[i]=='A'||str[i]=='e'||str[i]=='E'||str[i]=='i'||str[i]=='I'||str[i]=='o'||str[i]=='O'||str[i]=='u'||str[i]=='U') count++;
return count;
}
#include <stdio.h>
int main() {
char msg[21];
printf("Qual a string?\n");
scanf("%20s", msg);
printf("Existem %d vogais.\n", conta_a(msg));
return 0;
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jamirooo    0
jamirooo

hmm...n sei bem como fazer para ler as palavras todas da string experimetei colocar scanf("%20s", msg[20]) mas deu segmentation fold, pois claro...  :P

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    102
pmg

O teu 'problema' é no scanf().

Experimenta, logo a seguir ao scanf() imprimir a string que acabaste de ler ...

/* ... */
scanf("%20s", msg);
printf("String apanhada pelo scanf: [%s]\n", msg);
/* ... */

O scanf() automaticamente separa os inputs por espaços.

Para conseguires introduzir espaços na string tens várias soluções

a) usa fgets()

b) lê o input caracter a caracter, com getchar(), até encontrares um '\n' (ou EOF).

c) usa scanf() com uma 'format string' apropriada

/* a) */
fgets(msg, sizeof msg, stdin);
/* falta validação de erros!!! */
/* se houver mais caracteres para ler, eles ficam 'pendurados' no stdin */
/* Ah! e o ENTER faz parte de msg */

/* b) */
int ch;
size_t index = 0;
while (((ch = getchar()) != '\n') && (ch != EOF)) {
 msg[index++] = ch;
 if (index + 1 == sizeof msg) break;
}
msg[index] = '\0';

/* c) */
#if 0
scanf("%21[^\n]", msg); /* assume (sizeof msg) é 21 */
#endif
scanf("%20[^\n]", msg); /* assume (sizeof msg) é maior ou igual a 21 */
/* falta validação de erros!!! */
/* se houver mais caracteres para ler, eles ficam 'pendurados' no stdin */

Edit: erro no método com scanf()

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Njay    0
Njay

É muito importante que indentes o teu programa. Caso contrário não passa de uma massa uniforme de letras, difícil de ler. Se precisares de umas dicas diz.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1132
HappyHippyHippo
6 minutes ago, DarkAngel said:

Basta você trocar o scanf por gets e funcionará:

gets (msg);

o uso do gets é viemente desaconcelhado

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade