Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida referente a Caracteres especiais


Alexandre001

Pergunta

Boa tarde pessoal, estou começando a programar em C agora, estou com uma dúvida em relação a Caracteres especias, qual a forma certa de compara-los?

Vou dar um exemplo mais claro do que está acontecendo: Estou tentando criar uma calculadora, onde o usuário digita o numero e o sinal da operação desejada para executar a conta, porem não consigo fazer o programa funcionar, ainda não tenho muita noção para entender onde pode estar o erro, mas acredito que seja nesses if's, vou postar o código aqui, peço desculpas pela falta de conhecimento toda ajuda é bem-vinda!

#include <stdio.h>
#include <stdlib.h>

float num1;
float num2;

float res;

char ope1;

int main ()
{
    printf("Digite o primeiro numnero:");
    scanf("%f", &num1);
    printf("Digite a operacao desejada:");
    scanf("%c", &ope1);
    printf("Digite o segundo numero:");
    scanf("%f", &num2);
    if(ope1 == "+")
    {
        soma();
    }
    if(ope1 == "-")
    {
        subt();
    }
    if(ope1 == "*")
    {
        mult();
    }
    if(ope1 == /)
    {
        div();
    }
}

int soma()
{
    res = (num1 + num2);
    printf("%f", res);
    system("PAUSE");
    return(0);
}
int subt()
{
    res = (num1 - num2);
    printf("%f", res);
    system("PAUSE");
    return(0);
}
int div()
{
    res = (num1 / num2);
    printf("%f", res);
    system("PAUSE");
    return(0);
}
int mult()
{
    res = (num1 * num2);
    printf("%f", res);
    system("PAUSE");
    return(0);
}

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Olá!

Bom, a forma como eu gosto de fazer essas comparações é usando a tabela ASCII, que tem os valores inteiros que representam os caracteres em geral.

Vou ter passar um link para a tabela e um pedaço de código de como eu faria essa comparação:

TABELA ASCII

if (ope1 == 43)// 43 é o valor ASCII para o sinal de +

{
   soma();
}
Qualquer dúvida é só perguntar. Att., Pedro EDIT: O porquê da sua comparação não funcionar é que você está usando aspas duplas (" ") ao comparar chars, quando você deveria usar aspas simples (' '). O seu código deveria ficar da seguinte maneira:
if (ope1 == '+')//aspas simples

{
  soma();
}

Editado por PedroCunha
Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Pedro,

Tentei usar a tabela ASCII mas deu o seguinte erro no compilador (Dev-C++ 4.9.9.2): "21 C:\Dev-Cpp\main.cpp ISO C++ forbids comparison between pointer and integer"

As aspas simples já tinha tentado usar antes, o programa executa, mas mesmo assim não funciona, ele fecha sem aparecer nenhum resultado, como se não caisse em nenhum dos if's =/

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde Alexandre. Olha, eu acho que a razão da comparação com a tabela ASCII não ter funcionado foi porque o compilador do Dev-C++ provavelmente é um pouco mais antigo, porque aqui no Code::Blocks funcionou corretamente. Vou te apresentar duas formas funcionais do seu código.

1ª ->

#include <stdio.h>
#include <stdlib.h>

float num1;
float num2;

float res;

char ope1;
int soma();
int subt();
int mult();
int divi();

int main ()
{
    printf("Digite o primeiro numero:");
    scanf("%f", &num1);
    getchar();
    printf("Digite a operacao desejada:");
    scanf("%c", &ope1);
    getchar();
    printf("Digite o segundo numero:");
    scanf("%f", &num2);
    if(ope1 == 43)
    {
        soma();
    }
    if(ope1 == 45)
    {
        subt();
    }
    if(ope1 == 42)
    {
        mult();
    }
    if(ope1 == 47)
    {
        divi();
    }
    return 0;
}

int soma()
{
    res = (num1 + num2);
    printf("%f", res);
    system("PAUSE");
    return(0);
}
int subt()
{
    res = (num1 - num2);
    printf("%f", res);
    system("PAUSE");
    return(0);
}
int divi()
{
    res = (num1 / num2);
    printf("%f", res);
    system("PAUSE");
    return(0);
}
int mult()
{
    res = (num1 * num2);
    printf("%f", res);
    system("PAUSE");
    return(0);
}
2ª ->
#include <stdio.h>
#include <stdlib.h>

float num1;
float num2;

float res;

char ope1;
int soma();
int subt();
int mult();
int divi();

int main ()
{
    printf("Digite o primeiro numero:");
    scanf("%f", &num1);
    getchar();
    printf("Digite a operacao desejada:");
    scanf("%c", &ope1);
    getchar();
    printf("Digite o segundo numero:");
    scanf("%f", &num2);
    if(ope1 == '+')
    {
        soma();
    }
    if(ope1 == '-')
    {
        subt();
    }
    if(ope1 == '*')
    {
        mult();
    }
    if(ope1 == '/')
    {
        divi();
    }
    return 0;
}

int soma()
{
    res = (num1 + num2);
    printf("%f", res);
    system("PAUSE");
    return(0);
}
int subt()
{
    res = (num1 - num2);
    printf("%f", res);
    system("PAUSE");
    return(0);
}
int divi()
{
    res = (num1 / num2);
    printf("%f", res);
    system("PAUSE");
    return(0);
}
int mult()
{
    res = (num1 * num2);
    printf("%f", res);
    system("PAUSE");
    return(0);
}

Quatro observações:

1ª -> Veja que adicionei os protótipos das funções no começo do código. Ao fazer isso, o compilador sabe sobre o que você está falando com você escreve por exemplo: soma;

2ª -> Adicionei o getchar() após o scanf para limpar o buffer. Caso contrário o programa não funcionaria corretamente;

3ª -> Mudei o nome da função int div para int divi pois aparentemente div é o nome de uma função da biblioteca cstdlib(stdlib.h);

4ª -> Adicionei o return 0 no final de main, pois main é uma integer function.

Qualquer dúvida, estou à disposição.

Att.,

Pedro

Editado por PedroCunha
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...