[dúvida] Programação em C

Boas, surgiu-me mais uma dúvida:

Código:
void percent_eateros (pessoa registo[], int tam){
float iColestrol_total=190, iLDL=115, iHDLm=40, iHDLf=50, itrigli=150, percentagem;
int total=0, i;
for(i=0;i<tam;i++){
    if(registo[i].Colestrol_total>=iColestrol_total)
        if(registo[i].LDL>=iLDL)
            [COLOR=#ff0000][B]switch(registo[i].Sexo)[/B][/COLOR]{
            case 'm': if(registo[i].HDL<=iHDLm)
                        if(registo[i].Trigli>=itrigli)
                             total++;
                break;
            case 'f': if(registo[i].HDL<=iHDLf)
                        if(registo[i].Trigli>=itrigli)
                             total++;
                break;
        }
    }
    percentagem=percent(total, tam);
    printf("A percentagem de paciente com alto risco ateroscleose: %f", percentagem);
}

Mostrando este erro na linha que se apresenta a negrito e a vermelho: error C2050: switch expression not integral

Não compreendo o que quer dizer, será que alguém pode ajudar?
É que acho que depois disto o programa já deve estar pronto e correr sem problemas.

Cumps.
 
se so tens 2 casos, usa um simples if/else, keep it simple.

se quiseres manter o switch, cria um define para

#define MASCULINO 1
#define FEMININO 2

e poe os defines no switch.
 
é melhor manter o char. Ao tentar substituir pelo if/else, da-me outros erros..

Coloquei assim:
Código:
void percent_normal (pessoa registo[], int tam){
    float iColestrol_total=190, iLDL=115, iHDLm=40, iHDLf=50, itrigli=150, percentagem;
    int i, total=0;
    for(i=0;i<tam;i++)
        if(registo[i].Colestrol_total<iColestrol_total)
            if(registo[i].LDL<iLDL)
                if(registo[i].Sexo = 'm' ){
                if(registo[i].HDL>iHDLm)
                if(registo[i].Trigli<itrigli)
                total++;
            }


            else(registo[i].Sexo = 'f' ){
                if(registo[i].HDL<=iHDLf)
                if(registo[i].Trigli>=itrigli)
                total++;
            }    
        


    percentagem=percent(total,tam);
    printf("Percentagem de pessoas com valores normais: %f ", percentagem);
}

e passa a aparecer um erro: expression must be a modifiable lvalue
 
é com '==' e não com '=' na comparação.

if(registo.Sexo == 'm' )

ps: se n gostas dos defines, podes usar enumerado, sempre fica com um ar mais elegante :)
 
Desculpem, mas... O Switch funciona com chars e com ints, não funciona é com ponteiros/strings e com floats. Se não está a funcionar com um simples char, é porque qualquer outra coisa está mal, pelo que não faz muito sentido estar a sugerir soluções com enumeradores ou com defines que só poem o código mais complicado (não muito mais, é verdade, mas para quem está a começar qualquer complicação é suficiente para ser desmotivador).

De qualquer forma, se o Sexo só assume dois valores, então um simples if... else if... serve.

Cumps
 
Última edição:
Boas, ando a fazer uns exercícios para estudar para os exames, e surgiu-me uma dúvida neste:

É um programa que se insere uma quantidade de números e quando for inserido o numero zero, ele termina e faz a contagem de quantos números pares foram inseridos. O problema é que me diz sempre que a quantidade de números pares inseridos é sempre 1. O que é que estou a fazer mal?
Aqui fica o código:

Código:
#include <stdio.h>
#include <stdlib.h>


int paridade (int num);


main (){
	int num, resultado;
	int count;
	count=0;


	do{
		printf("insira um valor:");
		scanf("%d", &num);
	}while(num!=0);


	resultado=paridade(num);
	
	if(resultado==1){
		count++;
	}
	else{
		printf("o numero e impar");
	}


	printf("A quantidade de valores pares sao %d", count);
	system("pause");
}




int paridade(int num){
	if (num % 2 == 0){
		return 1;
	}
	else{
		return 0;
	}
}

Cumps
 
Não sei se percebi o que pretendes. Queres ter um conjunto de números e quando pressionas o 0 verificas quantos números pares existem nesse conjunto? Ou queres verificar o número que inseres e quando pressionas o 0 verifica se esse número é par ou impar? é que se for a primeira hipótese, não é isso estás a fazer isso. O que estás a fazer é a segunda, mas nem sequer estás a ver se o número é par ou impar só o 0. Como o última número que pressionas é o 0 ele vai verificar se o 0 é par ou impar, e obviamente que o resultado vai ser sempre 1.

Faltam aí umas coisas para isso funcionar. Não te esqueças que tens que guardar os número que vais inserindo até pressionares o 0.
 
Já consegui, obrigada.
Bastou mudar o do-while de sítio, e apaguei o else, caso o numero fosse impar.
Código:
#include <stdio.h>
#include <stdlib.h>


int paridade (int num);


main (){
	int num, resultado;
	int count;
	count=0;


	do{
		printf("insira um valor:");
		scanf("%d", &num);


	resultado=paridade(num);
	
	if(paridade(num) == 1){
		count++;
	}
	}while(num!=0);


	printf("A quantidade de valores pares sao %d", count);
	system("pause");


	}


int paridade(int num){
	if (num % 2 == 0){
		return 1;
	}
	else{
		return 0;
	}
}
 
Surgiu-me uma dúvida em mais um exercício:

O exercício consiste em pedir um numero ao utilizador, por exemplo 1234 e depois vai dizer qual o maior digito desse valor inserido, neste caso 4.
Mas neste momento o programa apenas me diz que o ultimo digito é o maior, não estou a perceber porquê.

Código:
#include <stdio.h>
#include <stdlib.h>


int maior_digito(int num);


main(){
	int resultado, num;
	
	
	printf("insira um numero;");
	scanf("%d", &num);


	resultado=maior_digito(num);


	printf("o maior digito e: %d", resultado);


	system("pause");


}


int maior_digito(int num){
	int maior;
	int digito;
	maior=0;


	while (num!=0){


		num=(int)num/10;
		digito=num%10;


			if(maior<digito){
				maior=digito;
			}
			else{
				digito=maior;
			}
		return maior;
	}
}

Cumps
 
Back
Topo