Ir ao conteúdo

função em c


cal.ba12

Posts recomendados

Postado

galera,

to tentando criar uma calculadora utilizando função, também tentando criar um wilhe para toda vez que o usuário digitar 's' ele faça o calculo novamente e um if para calcular a operação solicitada.

so que o wilhe so ta fazendo a pergunta uma vez e if não ta funcionando pois esta realizando todas as operacoes mesmo quando o usuario digita a solicitada.

me ajugem a reseuver esses problemas.

To utilizando code bloks.

#include<stdio.h>

#include<stdlib.h>

main(){

int n1,n2,op;

char v;

int soma(int x, int y);

int subtracao(int x, int y);

int divisao(int x, int y);

int mutiplicacao(int x, int y);

printf("Quer continuar digite S p/ sim e N p/ nao = ");

scanf("%s",& v);

while(v=='s'){

printf("\n\ndigite o valor 1 = ");

scanf("%d",& n1);

printf("digite o valor 2 = ");

scanf("%d",& n2);

printf("digite a operação = ");

scanf("%d",& op);

if (op='1'){

int calculo1 = soma (n1,n2);

printf("\n\nA Soma He = %d \n",calculo1);

}

if (op='2'){

int calculo2 = subtracao (n1,n2);

printf("A Subtracao He = %d \n",calculo2);

}

if (op='3'){

int calculo3 = divisao (n1,n2);

printf("A divisao He = %d \n",calculo3);

}

if (op='4'){

int calculo4 = mutiplicacao (n1,n2);

printf("A Mutiplicacao He = %d \n",calculo4);

}

}

return 0;

}

int soma(int x, int y){

int calculo1 = x+y;

return calculo1;

}

int subtracao(int x, int y){

int calculo2 = x-y;

return calculo2;

}

int divisao (int x, int y){

int calculo3 = x/y;

return calculo3;

}

int mutiplicacao(int x, int y){

int calculo3 = x*y;

return calculo3;

}

Postado

A condição do while ta invertida, o que é uma das razões dele executar apenas uma vez. Nesse caso você deve dar um botão pra sair do loop, não pra manter-se nele. Você deve pedir que o usuário digite "s", por exemplo, pra "sair".

E reavaliar aqui:


while(v != 's')

Já no caso dos if() o seu erro é não comparar os valores de op com o operador == e sim atribuir um valor a op com o operador =. O correto seria:


if(op == 3)
{
}

Por sinal, você até pode fazer assim, mas é mais recomendável usar um switch(), ate porque são mais rápidos que if():


switch(op)
{

case 1:
{
}
break;

case 2:
{
}
break;

case 3:
{
}
break;

case 4:
{
}
break;

}

Outra sugestão, nas funções do tipo


int soma(int x, int y){

int calculo1 = x+y;

return calculo1;
}

você perde tempo primeiro criando uma variável desnecessária, calculo1, e segundo atribuindo a ela o resultado da operação. Você poderia fazer muito mais eficiente e elegantemente:


int soma(int x, int y)
{
return x + y;
}

Postado

Amigo gostei da sua resposta, mais referente ao wilhe você pede ele realiza as perguntas o calculo so que depois ele não pergunta novamente ao usuario para saber se ele quer continuar. me ajude por favor.

#include<stdio.h>

#include<stdlib.h>

main(){

int n1,n2,op;

char v;

int soma(int x, int y);

int subtracao(int x, int y);

int divisao(int x, int y);

int mutiplicacao(int x, int y);

printf("Quer continuar digite S p/ sair\n");

scanf("%s",& v);

while(v !='s'){

printf("\n\ndigite o valor 1 = ");

scanf("%d",& n1);

printf("digite o valor 2 = ");

scanf("%d",& n2);

printf("digite a operação = ");

scanf("%d",& op);

switch (op){

case 1:

{

int calculo1 = soma (n1,n2);

printf("Valor = %d\n",calculo1);

}

break;

case 2:

{

int calculo2 = subtracao (n1,n2);

printf("Valor = %d\n",calculo2);

}

break;

case 3:

{

int calculo3 = divisao (n1,n2);

printf("Valor = %d\n",calculo3);

}

break;

case 4:

{

int calculo4 = mutiplicacao (n1,n2);

printf("Valor = %d\n",calculo4);

}

break;

}

}

return 0;

}

int soma(int x, int y){

return x+y;

}

int subtracao(int x, int y){

return x-y;

}

int divisao (int x, int y){

return x/y;

}

int mutiplicacao(int x, int y){

return x*y;

}

A condição do while ta invertida, o que é uma das razões dele executar apenas uma vez. Nesse caso você deve dar um botão pra sair do loop, não pra manter-se nele. Você deve pedir que o usuário digite "s", por exemplo, pra "sair".

E reavaliar aqui:


while(v != 's')

Postado

Bom, é necessário colocar a pergunta dentro do while().


printf("Quer continuar digite S p/ sair\n");
scanf("%s",& v);

No teu caso, a pergunta ta fora do contexto do while() definido pelos seus { }.

Seria interessante que você colocasse uma segunda opção, que seria a de continuar. Alem do "s" de sair. Daí se o usuário digitar qualquer outra coisa que não seja "s" ele vai pra parte das contas. Caso contrario, o usuário então digitou "s" e


while(v != 's')

é falso. O loop acaba.

Outra sugestão, novamente isso é desnecessário:


case 1:
{
int calculo1 = soma (n1,n2);
printf("Valor = %d\n",calculo1);
}
break;

optimizando:


case 1:
{
printf("Valor = %d\n", soma(n1, n2));
}
break;

Ou,


case 1: printf("Valor = %d\n", soma(n1, n2)); break;

Postado

Amigo muito obrigado pela dica do case. ja mudei e ficou muito melhor mesmo. é que estou aprendendo c.

mais teria como me explicar melhor essa segunda opção do while pois não to conseguindo pegar o que você explicou muito bem.

obrigador pelas ajudas que você esta me dando que ta sendo de grande ajuda na hora que estou estudando.

Bom, é necessário colocar a pergunta dentro do while().


printf("Quer continuar digite S p/ sair\n");
scanf("%s",& v);

No teu caso, a pergunta ta fora do contexto do while() definido pelos seus { }.

Seria interessante que você colocasse uma segunda opção, que seria a de continuar. Alem do "s" de sair. Daí se o usuário digitar qualquer outra coisa que não seja "s" ele vai pra parte das contas. Caso contrario, o usuário então digitou "s" e


while(v != 's')

é falso. O loop acaba.

Postado
mais teria como me explicar melhor essa segunda opção do while pois não to conseguindo pegar o que você explicou muito bem

Claro, é simples. Já entendeu como funciona um while(), né?


while([COLOR="Blue"]isso deve ser verdade[/COLOR])
{
[COLOR="blue"]...pra eu poder fazer isso![/COLOR]
}
[COLOR="blue"]Caso contrario, o programa pula pra cá e continua.[/COLOR]

Então, ele deve checar a condição do while e enquanto essa condição for verdade ele faz o que você colocou dentro do { }.

Bom no teu caso, ele checa

while(v != 's')

se v não é s. E enquanto isso for verdade ele calcula. Se o usuário digitar qualquer outra coisa a condição é falsa e ele sai do loop.

A ordem é


while()
{
[COLOR="blue"] linha 1
linha 2
linha 3
linha 4
...
ultima linha, e se a condição for verdadeira, volta pra primeira.[/COLOR]
}

Então basta você mover a pergunta pra dentro do while sobre se quer continuar ou não, assim ela vai aparecer novamente sempre que terminar um calculo:


while(v != 's')
{
printf("Quer continuar digite S p/ sair\n");
scanf("%s",& v);
...
}

Arquivado

Este tópico foi arquivado e está fechado para 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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!