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

Tentativa De Uma Mini Calculadora


rodfraga

Pergunta

Galera, eu sou novo em C, e estava tentando fazer um programa que calculasse adições, subtrações, multiplicações e divisões. Porém, eu estou tentando fazê-lo, mas o Dev-C++ está retornando uns 21 erros na compilações. Muitos repetidos.. dry.gif

Só que eu não sei mais aonde mudar o código, então eu vim aqui pedir ajuda à vocês, já que sou iniciante. laugh.gif

Aí vai o código(percebi que devo estar errando em chamada de funções com valores ou algo assim. Podem ser erros básicos também que eu passei direto e não percebi.)

void main
{
int op, pum, pdois, res;
printf("Temos 5 operacoes.Digite 1 p/+,2 p/-,3 p/*,4 p/div!");
scanf(op);
if (op==1){
printf("Passe o primeiro numero");
scanf(pum);
printf("Agora o segundo");
scanf(pdois);
res=ad(pum,pdois);
} else if (op==2){
printf("Passe o primeiro numero");
scanf(pum);
printf("Agora o segundo");
scanf(pdois);
res=sub(pum,pdois);
} else if (op==3){
printf("Passe o primeiro numero");
scanf(pum);
printf("Agora o segundo");
scanf(pdois);
res=mlt(pum,pdois);
} else if (op==4){
printf("Passe o primeiro numero");
scanf(pum);
printf("Agora o segundo");
scanf(pdois);
res=div(pum,pdois);
}
printf(res);
}
int ad(int x, int y)
{
int z;
z=x+y;
return z;
}
int sub(int x, int y)
{
int z;
z=x-y;
return z;
}
int mlt(int x, int y)
{
int z;
z=x*y;
return z;
}
int div(int x, int y)
{
int z;
z=x/y;
return z;
}

Está aí, alguém pode me explicar meus erros?

Obrigado a atenção galera!

Rodrigo

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Dei uma arrumada no código, agora funciona:

/*Arquivo de cabeçalho*/
#include <stdio.h>


/*Protótipos de funções*/
int ad(int,int);
int sub(int,int);
int mlt(int,int);
int div(int,int);

void main()
{
int op, pum, pdois, res;
printf("Temos 5 operacoes. Digite \n 1)+ \n 2)-\n 3)* \n 4)/ \n");
printf("Escolha a opcao: ");
scanf("%d",&op);
if (op==1){
printf("Passe o primeiro numero: ");
scanf("%d",&pum);
printf("Agora o segundo: ");
scanf("%d",&pdois);
res=ad(pum,pdois);
} else if (op==2){
printf("Passe o primeiro numero: ");
scanf("%d",&pum);
printf("Agora o segundo: ");
scanf("%d",&pdois);
res=sub(pum,pdois);
} else if (op==3){
printf("Passe o primeiro numero: ");
scanf("%d",&pum);
printf("Agora o segundo: ");
scanf("%d",&pdois);
res=mlt(pum,pdois);
} else if (op==4){
printf("Passe o primeiro numero: ");
scanf("%d",&pum);
printf("Agora o segundo: ");
scanf("%d",&pdois);
res=div(pum,pdois);
}
printf("%d",res);
}
int ad(int x, int y)
{
int z;
z=x+y;
return z;
}
int sub(int x, int y)
{
int z;
z=x-y;
return z;
}
int mlt(int x, int y)
{
int z;
z=x*y;
return z;
}
int div(int x, int y)
{
int z;
z=x/y;
return z;
}

Os erros foram os segintes:

- Não foi incluido o arquivo de cabeçalho stdio.h , para usar printf() e scanf();

- Você não usou protótipos de funçao, no seu programa você definiu as funções depois de main, então você precisa de protótipos;

- Nas funções scanf(), deve existir uma tag indicando o tipo de valor que você quer armazenar em uma variável, e & antes de uma variável.

Ex: scanf("%d", &variavel")

Link para o comentário
Compartilhar em outros sites

  • 0

olha só esse

int main()
{
int op,pum,pdois,res;
printf("Temos 5 operacoes.Digite 1 p/+,2 p/-,3 p/*,4 p/div!");
scanf("%d", &op);
if (op==1){
printf("Passe o primeiro numero");
scanf("%d",&pum);
printf("Agora o segundo");
scanf("%d",&pdois);
res=ad(pum,pdois);
} else if (op==2){
printf("Passe o primeiro numero");
scanf("%d",&pum);
printf("Agora o segundo");
scanf("%d",&pdois);
res=sub(pum,pdois);
} else if (op==3){
printf("Passe o primeiro numero");
scanf("%d",&pum);
printf("Agora o segundo");
scanf("%d",&pdois);
res=mlt(pum,pdois);
} else if (op==4){
printf("Passe o primeiro numero");
scanf("%d",&pum);
printf("Agora o segundo");
scanf("%d",&pdois);
res=div(pum,pdois);
}
printf(res);
}
int ad(int x, int y)
{
int z;
z=x+y;
return z;
}
int sub(int x, int y)
{
int z;
z=x-y;
return z;
}
int mlt(int x, int y)
{
int z;
z=x*y;
return z;
}
int div(int x, int y)
{
int z;
z=x/y;
return z;
}

Não fiz escrevi protótipo nenhum e não acusou "erros". Ela apenas falha na hora de escrever o resultado da operação, dizendo "operação ilegal blablabla" e fecha. E no debugger do Dev-C++ ele alerta que o retorno de main não é int... huh.gif

Link para o comentário
Compartilhar em outros sites

  • 0

olha só esse

int main()
{
int op,pum,pdois,res;
printf("Temos 5 operacoes.Digite 1 p/+,2 p/-,3 p/*,4 p/div!");
scanf("%d", &op);
if (op==1){
printf("Passe o primeiro numero");
scanf("%d",&pum);
printf("Agora o segundo");
scanf("%d",&pdois);
res=ad(pum,pdois);
} else if (op==2){
printf("Passe o primeiro numero");
scanf("%d",&pum);
printf("Agora o segundo");
scanf("%d",&pdois);
res=sub(pum,pdois);
} else if (op==3){
printf("Passe o primeiro numero");
scanf("%d",&pum);
printf("Agora o segundo");
scanf("%d",&pdois);
res=mlt(pum,pdois);
} else if (op==4){
printf("Passe o primeiro numero");
scanf("%d",&pum);
printf("Agora o segundo");
scanf("%d",&pdois);
res=div(pum,pdois);
}
printf(res);
}
int ad(int x, int y)
{
int z;
z=x+y;
return z;
}
int sub(int x, int y)
{
int z;
z=x-y;
return z;
}
int mlt(int x, int y)
{
int z;
z=x*y;
return z;
}
int div(int x, int y)
{
int z;
z=x/y;
return z;
}

Não fiz escrevi protótipo nenhum e não acusou "erros". Ela apenas falha na hora de escrever o resultado da operação, dizendo "operação ilegal blablabla" e fecha. E no debugger do Dev-C++ ele alerta que o retorno de main não é int... huh.gif

Vale lembar que eu não adicionei o tal arquivo.

E ah, Douplus, eu botei o seu código, ele passa pelo debugger na moral, mas dá "operação ilegal" e no debugger fala que o retorno de main não é int... blink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

1º o cdgo tah meio ilegivel...

psybox@andromeda:~/Desktop$ gcc -o APAG APAG.c
APAG.c: In function `main':
APAG.c:31: warning: passing arg 1 of `printf' makes pointer from integer without a cast
APAG.c:56:2: warning: no newline at end of file
psybox@andromeda:~/Desktop$ ./APAG
Temos 5 operacoes.Digite 1 p/+,2 p/-,3 p/*,4 p/div!1
Passe o primeiro numero25
Agora o segundo52
Falha de segmentação
já foi corrigida tda... a do douplos(corrigiu) basta pelo menos no linux tirar o void e colocar int e no final de main return 0 q fica ok(não fala q o retorno de main não é int)... um exemplo q fiz e aeh tinha pedido ajuda aqui mesmo =P:
#include <stdio.h>
#include <math.h>


//PROTÓTIPOS:
float *pot();
float *soma();
float *sub();
float *muti();
float *div();
int menu();

int main()
{
int a;
printf("\n\n\t\tCalc C");
do {
a = menu();
}
while (a != 6); /* Chama a função menu() enquanto 'a != 6' */
return 0;}

float *pot()
{
float a, b, x;
printf("\nvalor: ");
scanf("%f", &a);
getchar();

printf("elevar á: ");
scanf("%f", &b);
getchar();

if ( b == 0 )
{
printf("\n\tExpoente inválido !");
menu();
}
else
{
x=a*b;
}
printf("\nRESUL: %.3f\n", x);
}


float *soma()
{
float a, b, x;
printf("\nvA: ");
scanf("%f", &a);
getchar();

printf("\nvB: ");
scanf("%f", &b);
getchar();

x = a + b;

printf("\nRESUL: %.3f\n", x);
}

float *sub()
{
float a, b, x;
printf("\nvA: ");
scanf("%f", &a);
getchar();

printf("\nvB: ");
scanf("%f", &b);
getchar();

x = a - b;

printf("\nRESUL: %.3f\n", x);
}

float *muti()
{
float a, b, x;
printf("\nvA: ");
scanf("%f", &a);
getchar();

printf("\nvB: ");
scanf("%f", &b);
getchar();

x = a * b;

printf("\nRESUL: %f.3\n", x);
}

float *div()
{
float a, b, x;
printf("\nvA: ");
scanf("%f", &a);
getchar();

printf("\nvB: ");
scanf("%f", &b);
getchar();

x = a / b;

printf("\nRESUL: %.3f\n", x);
}

int menu()
{
int *a;
int m;
printf("\nOpcões: \n\t(1) +\n\t(2) -\n\t(3) *\n\t(4) div\n\t(5) potenciação\n\t(6) sair : ");
scanf("%d", &m);
getchar();

switch (m)
{
case 1:
soma();
break; /*Obs.: o comando break fas com que saia da execução do laço*/
case 2:
sub();
break;
case 3:
muti();
break;
case 4:
div();
break;
case 5:
pot();
break;
case 6:
break;

default: printf("\n\t Escolha uma opcão valida !");
}

return m; /*Retorna o valor de m*/
}

Link para o comentário
Compartilhar em outros sites

  • 0

Do mesmo jeito que você não pode usar uma variável antes de declará-la, ex.:

/*Programa com erro:
tentar usar uma variável
antes de declará-la.*/
#include <stdio.h>

int main(void)
{
   for (i = 0; i < 8; i++)
       printf("%d", i);
   printf("\n");
   int i;
}
Assim que funciona as funções, se chamá-las antes de declará-las ocorrerá um erro. Então você tem duas opções: Ou você define as funções antes de main() ou qualquer outra função que a chame. Ex.:
#include <stdio.h>

int soma(int v1, int v2)
{
   return v1 + v2;
}

int main(void)
{
   printf("A soma de 2 + 3 e igual a: %d", soma(2,3));
   return 0;
}
Ou você usa protótipos de função, isto é, declarar uma função e antes de defini-la. Ex.:
#include <stdio.h>

/* PROTÓTIPO */
int soma(int, int);

int main(void)
{
   printf("A soma de 2 + 3 e igual a: %d", soma(2,3));
   return 0;
}

int soma(int v1, int v2)
{
   return v1 + v2;
}

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...