• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

jamirooo

[Resolvido] contar vogais numa string

7 mensagens neste tópico

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;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Provavelmente o problema está no scanf, que só te lê a primeira palavra.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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()

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É 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.

0

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