Ir ao conteúdo

Posts recomendados

  • Membro VIP
Postado

OLÁ!

ESCREVI O SEGUINTE PROGRAMA:

#include <stdio.h>
int main(void)
{
char palavra[50];
int i;
char caractere;
int quantidade;
printf ("Por favor, escreva algo:\n");
scanf ("%c", &palavra);
printf ("Por favor, digite um caractere:\n");
scanf ("%c", &caractere);
for (i = 0; i < 50; i++){
if (palavra == caractere) {
quantidade = 1 + quantidade;
}
}
printf ("O numero de %c em %c e: %d.", caractere, palavra, quantidade);
system("pause");
return 0;
}

ELE NÃO APRESENTA ERRO ALGUM, MAS QUANDO EXECUTO DIGITO UMA PALAVRA, MAS ELE JÁ FINALIZA, NEM ESPERA EU DIGITAR O CARACTERE E MUITO MENOS INFORMA QUANTOS DAQUELE CARACTERE EXISTE NA PALAVRA.

ENFIM, ELE NÃO EXECUTA CADA INSTRUÇÃO. APÓS A PALAVRA DIGITADA ELE JÁ FINALIZA, SEM EXECUTAR INSTRUÇÃO PAUSADO POR INSTRUÇÃO, SEM DAR A OPORTUNIDADE DE DIGITAR CADA DADO SOLICITADO.

COMO FAÇO PARA ESSE PROGRAMA FUNCIONAR COMO ESPERO?

Postado

Olá!

 

 

Bom pelo que vi você cometeu alguns pequenos, porém, importantes erros . . .

 

 |9|warning: format ‘%c expects argument of type char *’, but argument 2 has type char (*)[50]’

 

aqui o alerta está lhe dizendo que o código de formatação é incompatível com o tipo da variável que você deseja usar, neste caso você só precisa colocar o código de formatação certo “ %s

 

muito provavelmente você vai receber este outro alerta, após colocar o código de formatação certo:

 

|13|warning: format ‘%s expects argument of type char *’, but argument 2 has type char (*)[50]’

 

isso ocorre porque em uma cadeia de caracteres ( string ) não é necessário a utilização de “ & ” dentro de um scanf().

 

 

- Outra coisa que pode estar causando o problema é o fato de que em funções para a entrada de dados, como scanf(), o buffer usado para armazenar os dados que entraram tem a tendencia de deixar o ultimo caractere armazenado no buffer, sendo que na maior parte das vezes o caractere será o “ \n ” ( pula linha ), sendo assim no scanf() seguinte o “ \n ” será usado finalizando assim a entrada de dados, não permitindo ao usuário entrar com os dados corretos.

 

 

* Uma das forma que você pode usar para evitar este problema é usando dentro dos seus scanf() um código de formatação que realizada a limpeza do buffer do teclado, um dos que existem é o %*c, colocado logo apos o codigo convencional neste caso " %s "

 

* Outra forma é utilizando funções que realizem a tarefa, para o Linux e Windows você pode tentar usar a função getchar(); não é sempre que ela funciona mas dependendo da ocasião pode quebrar uma galho.

 

Para o Linux você pode usar __fpurge ( stdin );

 

 

Como não tenho muito conhecimento nesta parte voce deixar para voce buscar a melhor função para os seus algoritmos . . .

 

 

OBS: para os sistemas Windows e Linux você muito provavelmente vai encontrar a função fflush ( stdin ); NÃO a use, ela é uma função que não foi desenvolvida especificamente para está tarefa e costuma ter um comportamento indefinido, podendo causar problemas durante a sua utilização.

 

- |28|warning: format ‘%c expects argument of type int’, but argument 3 has type char *’

 

aqui este alerta está lhe alertando para o fato de que o código de formatação " %c " não é compativel com o tipo da variável “ palavra ” que neste caso é uma string, é só colocar o código de formatação certo “ %s

 

 

e o alerta seguinte é o principal problema:

 

|22|warning: comparison between pointer and integer [enabled by default]|

 

ele ocorre porque não linguagem C você não pode fazer a comparação direta entre uma variável do tipo string e um caractere, como você tentou fazer.

 

 

Neste caso você deve alterar o código:

 

for ( i = 0; i < 5; i++ )
   {
      if ( palavra == caractere )
        {
           quantidade = 1 + quantidade;
        }
   }

 

por:

 

 

for  ( i = 0; i < 5; i++ )
    {
       if ( palavra [ 0 ] == caractere )
         {
           quantidade = 1 + quantidade;
         }
    }

 

Bom por hora era só isso . . .

 

 

Ubuntu 14.04  GCC 4.8  CodeBlocks 13.12

 

 

Espero Ter Ajudado ! ! !

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!