Ir ao conteúdo

C Poderiam me dizer por que o programa não roda? Erro de multichar e não sei rsv.


Ir à solução Resolvido por AdrianoSiqueira,

Posts recomendados

Postado
#include		 <stdio.h>
#include		 <math.h>

int main(){
	float r, g, h, a, v;
	char	forma[20]="";
	printf("Digite a opcao: cone, cilindro ou esfera. Depois insira raio, geratriz e altura");
			scanf("%s", &forma);
			scanf("%f", &r);
			scanf("%f", &g);
			scanf("%f", &h);
	switch(forma[20]){
		case 'cone':
				a = 3.14 * r * (r + g);
				v = (3.14 * pow(r,2) * h)/3;
				printf("Sua area: %.2f\n E seu volume: %.2f", a,v);
			break;
		case 'cilindro':
				a = 2 * 3.14 * r * (r + h);
				v = 3.14 * pow(r,2) * h;
				printf("Sua area: %.2f\n E seu volume: %.2f", a,v);
			break;
		case 'esfera':
					a = 4 * 3.14 * pow(r,2);
					v = 4/3 * 3.14 *  pow(r,3);
					printf("Sua area: %.2f\n E seu volume: %.2f", a,v);
				break;	
}	
	return 0;
}


 

  • Amei 1
  • Solução
Postado

Está confundindo o funcionamento do switch do C, com o switch de alguma outra linguagem de programação. Em C, o switch não serve para comparar strings, porque elas são tratadas como vetores de char.

 

Para realizar comparação de strings, é necessário adicionar a biblioteca string.h e usar a função strcmp, passando a variável e a string que deseja comparar a igualdade. Essa função retorna 0 quando as strings são iguais.

 

Seu código corrigido e com algumas modificações, pode ser assim:

#include <stdio.h>
#include <math.h>
#include <string.h>

int main() {
    float r, g, h, a, v;
    char forma[20] = "";

    printf("Forma [cone, cilindro, esfera]: ");
    scanf("%s", forma);

    printf("Raio: ");
    scanf("%f", &r);

    printf("Geratriz: ");
    scanf("%f", &g);

    printf("Altura: ");
    scanf("%f", &h);

    if (strcmp(forma, "cone") == 0) {
        a = 3.14 * r * (r + g);
        v = (3.14 * pow(r, 2) * h) / 3;
    } else if (strcmp(forma, "cilindro") == 0) {
        a = 2 * 3.14 * r * (r + h);
        v = 3.14 * pow(r, 2) * h;
    } else if (strcmp(forma, "esfera") == 0) {
        a = 4 * 3.14 * pow(r, 2);
        v = 4 / 3 * 3.14 *  pow(r, 3);
    } else {
        printf("Forma não reconhecida.\n");
        return 1;
    }

    printf("  Area: '%.2f'.\n", a);
    printf("Volume: '%.2f'.\n", v);

    return 0;
}

 

  • Curtir 2
  • Amei 1
Postado

@Noferatus21 Em vez de testar strings seu programa podia oferar as opções no menu entre 1 e 3, assim poderia usar switch com esses valores inteiros.

 

Seu código tem alguns problemas nos cálculos. No cone a geratriz é a relação da altura e raio, então se tivesse que usar isso ela devia ser o cálculo com as outras duas variáveis (g² = h² + r²) e não uma entrada do usuário. E o cálculo da área é π * r(r + √(h² + r²)).

 

Na esfera onde você divide 4/3, como é uma operação entre inteiros o resultado fica arredondado. Para evitar isso você pode passar pelo menos uma constante double, p.ex: 4/3.0. E como a altura é usada apenas no cone e cilindro, você podia colocar essa entrada só nessas duas condições.

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...