Dúvida: strcmp

4 respostas
F
Olá. Sou novo no fórum e também iniciante na área de programação. Estava fazendo uma calculadora científica e quis colocar a opção do usuário do programa digitar a operação básica desejada, mas ocorrem erros. Se puderem me ajudar, agradeço.
#include <stdio.h>
#include <math.h>
#include <conio.h>
main()
{          system ("color F8");
            float a, b, x;
            char escolha[15];
            printf("Digite a operacao desejada, sem caracteres especiais: ");
            scanf("%s", &escolha);
            
            if(strcmp(escolha,"adicao")||(escolha,"Adicao")||(escolha,"ADICAO"))
            {
                 printf("\nDigite o primeiro numero a ser somado: ");
                 scanf("%f", &a);
                 printf("\nDigite o segundo numero a ser somado: ");
                 scanf("%f", &b);
                 x=a+b;
                 printf("\nO resultado da soma entre %.2f e %.2f (valores aproximados) e: %.2f", a, b, x);
            }
            else
            if(strcmp(escolha,"subtracao")||(escolha,"Subtracao")||(escolha,"SUBTRACAO"))
            {
                 printf("\nDigite o primeiro numero a ser subtraido: ");
                 scanf("%f", &a);
                 printf("\nDigite o segundo numero a ser subtraido: ");
                 scanf("%f", &b);
                 x=a-b;
                 printf("\nO resultedo da subrtracao entre %.2f e %.2f (valores aproximados) e: %.2f", a, b, x);
                 
            }
            if(strcmp(escolha,"divisao")||(escolha,"Divisao")||(escolha,"DIVISAO"))
            {
                 printf("\nDigite o dividendo: ");
                 scanf("%f", &a);
                 printf("\nDigite o divisor: ");
                 scanf("%f", &b);
                 x=a/b;
                 printf("\nO resultedo da divisao entre %.2f e %.2f (valores aproximados) e: %.2f", a, b, x);
            }
            if(strcmp(escolha,"multiplicacao")||(escolha,"Multiplicacao")||(escolha,"MULTIPLICACAO"))
            {
                 printf("\nDigite o primeiro numero a ser multiplicado: ");
                 scanf("%f", &a);
                 printf("\nDigite o segundo numero a ser multiplicado: ");
                 scanf("%f", &b);
                 x=a*b;
                 printf("\nO resultado da  multiplicacao entre %.2f e %.2f (valores aproximados) e: %.2f", a, b, x);
                 system("pause");
            }
}

4 Respostas

E

Troque

if(strcmp(escolha,"subtracao")||(escolha,"Subtracao")||(escolha,"SUBTRACAO"))

Por

if(strcmp(escolha,"subtracao") == 0
    ||
   strcmp(escolha,"Subtracao") == 0
   ||
   strcmp(escolha,"SUBTRACAO") == 0)

É que strcmp retorna zero quando as strings são iguais. Além disso, o C não consegue identificar que você quer chamar 3 vezes a rotina strcmp se você não especificar o nome da rotina 3 vezes, como eu fiz acima.

Em C, 0 é false, e qualquer coisa diferente de 0 é true.

E

Como você está usando <conio.h> posso assumir que você está usando Windows e algum compilador como o da Microsoft ou da CodeGear. Nesse caso, provavelmente você pode usar:

if(_stricmp (escolha,"subtracao") == 0)

A rotina _stricmp é igual à rotina strcmp, mas ela não faz distinção entre letras minúsculas e maiúsculas. Então, se você escrever “subtracao” ou “Subtracao” ou “SUBTRACAO” ou mesmo “SuBtRaCaO” tanto faz, que ela vai considerar igual.

Veja: http://msdn.microsoft.com/en-us/library/k59z8dwe(VS.80).aspx

F

[color=red]Valeow mesmo pelas dicas![/color] :lol: Como não estava acostumado a mexer com strings, pensei q poderia fazer como os floats, ints, etc.

G

Você precisa ler novamente seu material sobre programação em C.

Criado 24 de março de 2010
Ultima resposta 25 de mar. de 2010
Respostas 4
Participantes 3