lucas costa da cruz Posted January 11, 2022 at 04:08 AM Share Posted January 11, 2022 at 04:08 AM boa noite fiz esse exercício e não tenho certeza se está de acordo com o enunciado pode me ajudar por favor 3- Ler uma frase e contar quantos caracteres são espaços em branco #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> int main(void) { // variáveis char texto[12]; // vetor que recebe a entrada feita pelo usuário int i, j, contador=0; // variáveis para controlar o loop principal, secundário e a quantidade de caracteres encontrados, respectivamente char vogais[] = "aeiouAEIOU"; // vetor de vogais // captura do texto que será digitado pelo usuário printf("Digite sua frase: "); gets(texto); // contagem de vogais da entrada feita pelo usuário int ContadorEspacos=0; for (i=0; i<strlen(texto); i++) { if (texto[i] == ' ') { ContadorEspacos++; } for (j=0; j<strlen(vogais); j++){ if (texto[i] == vogais[j]) { contador++; } } } // exibição do número de vogais encontrados if (contador == 1) { printf("\n\no texto informado possui 1 vogal\n\n"); } else { printf("\n\no texto informado possui %d vogais\n\n", contador); } return 0; } Quote Link to comment Share on other sites More sharing options...
Administrators Fernando Mercês Posted January 11, 2022 at 10:25 AM Administrators Share Posted January 11, 2022 at 10:25 AM Bom dia, @lucas costa da cruz, tudo bem? Eu precisei editar seu post original pra formatar o código como código (é só clicar no botão <> aqui do editor na hora de postar). Pode fazer isso da próxima vez que postar código, por gentileza? ? Também fiz as seguintes edições no seu código, para melhorar a visualização: Indentação: aninhei os códigos dentro dos blocos {} Espaços: pus espaços entre coisas como include<arquivo> e for (i=0;i<...;i++), etc. Coloquei os comentários das declarações de variáveis alinhados. Adicionei também um espaço depois do caractere ":" (dois pontos) na linha "Digite sua frase: ". Tudo isso foi pra deixar o código melhor pra quem for te ajudar, inclusive pra você mesmo ler. Agora em relação à lógica do programa em si, me parece que você modificou um programa que já contava vogais para agora contar espaços, foi isso? Achei inteligente fazer isso, parabéns! ? A sua contagem está certa. Só faltou imprimir o valor da variável ContadorEspacos. E nem precisa usar um condicional (if) pra testar se é maior que zero. Basta imprimir o valor dela, mesmo que seja zero. Mais uma coisa: você aloca um vetor de apenas 12 posições com char texto[12]. Isso vai fazer com que sua frase não possa ter mais do que 11 caracteres. Eu usaria pelo menos uns 255. ? NOTA: O seu programa possui um bug de segurança ao combinar um buffer que pode ser facilmente estourado com o uso da função gets(), mas este assunto foge do tema da lógica de programação em si, e acredito que este exercício seja para treinar sua lógica, então abrir este assunto com seus professores pode desviar muito, mas se quiser saber mais sobre o assunto, é só googlar por "buffer overflow". Um abraço! Quote Link to comment Share on other sites More sharing options...
Lucca Rodrigues Posted January 11, 2022 at 12:23 PM Share Posted January 11, 2022 at 12:23 PM 1 hora atrás, Fernando Mercês disse: A sua contagem está certa. Só faltou imprimir o valor da variável ContadorEspacos. E nem precisa usar um condicional (if) pra testar se é maior que zero. Basta imprimir o valor dela, mesmo que seja zero. A contagem não está certa: o que deveria ser contado é a quantidade de caracteres de espaço em branco: ' ' space (SPC) '\t' horizontal tab (TAB) '\n' newline (LF) '\v' vertical tab (VT) '\f' feed (FF) '\r' carriage return (CR) O autor poderia usar isspace() da ctype, que verifica se o caractere passado como argumento é um caractere de espaço em branco e retorna um valor diferente de 0 caso seja e 0 caso não seja. A verificação poderia ser manual também, com uma string constante de preferência com todos caracteres de espaço em branco e um loop, assim como fez pra contar as vogais. Quote Link to comment Share on other sites More sharing options...
Administrators Fernando Mercês Posted January 11, 2022 at 01:48 PM Administrators Share Posted January 11, 2022 at 01:48 PM Bem lembrado. Mas tem um ponto.. Eu acho que a gente deve considerar o que o aluno está estudando (admitindo que isso é um exercício de um curso de programação). Normalmente, em enunciados deste tipo, que miram a lógica, considerar tabulações verticais e outros caracteres é um pouco "demais". Usar a isspace() provavelmente vai na mesma linha. Mas concordo que sua consideração é mais completa. Se quem passou o exercício falou de outros caracteres, e/ou falou da isspace() - o que pode ter acontecido vide a inclusão do ctype.h pelo @lucas costa da cruz -, você está certíssimo. Do contrário, comparar com ' ' deve ser suficiente. ? Um abraço, Fernando Quote Link to comment Share on other sites More sharing options...
lucas costa da cruz Posted February 1, 2022 at 09:03 PM Author Share Posted February 1, 2022 at 09:03 PM obrigado por ter me ajudado e desculpe por não ter visto a notificação é que eu uso o pc e dificilmente eu entro no pc porque não sou o único que uso o pc Quote Link to comment Share on other sites More sharing options...
samparker1122 Posted September 3, 2022 at 08:14 PM Share Posted September 3, 2022 at 08:14 PM Olá, Obrigado por esta informação valiosa. por favor verifique aqui Obrigado Bom fim de semana Quote Link to comment Share on other sites More sharing options...
fredericopissarra Posted September 3, 2022 at 11:57 PM Share Posted September 3, 2022 at 11:57 PM gets() não deve ser usado... Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.