Jump to content
Fórum Script Brasil
  • 0

Dúvida referente a Caracteres especiais


Alexandre001

Question

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 to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 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();
}

Edited by PedroCunha
Link to comment
Share on other 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 to comment
Share on other 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

Edited by PedroCunha
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...