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

Qual o problema disso? Aspas simples e dupla


JaoOLeigo

Pergunta

Vou colocar uma parte do programa, a parte que estou em duvida mas tem mais código pra cima e pra baixo do que vou mostrar.

image.png.eca76fb74fcbef47f7aaf44b23abf3f2.png

O que acontece é que eu não consigo fazer esse do-while funcionar, já tentei usar tanto o %c quanto o %s no scanf. já tentei usar aspas simples tanto na declaração do char, quanto la dentro da condição do while, tentei varias combinações envolvendo, %c %s ' '  e " ". Eu sei que o certo é usar a aspas simples e o %c porem tentei isso tudo porque não tava dando certo. Quando chega la no scanf do while, ele le a variavel cont mas depois finaliza o programa, nem chega a executar os comandos abaixo dele.

obs: já tentei com a biblioteca string.h inserida e não deu, tirei ela a toa mesmo.

 

Código completo:

#include <stdio.h>

#include <stdlib.h>


struct tiposDeVoto{
    int nulos;
    int brancos;
    int c[4];
}tDV={0,0,{0,0,0,0}};

struct porcVotos{
    float nulos;
    float brancos;
    float c[4];
}pV={0.0,0.0,{0.0,0.0,0.0,0.0}};

int main(){
    /*Em uma eleição para governador concorrem 4 candidatos (1, 2, 3 e 4). No dia da eleição cada
     um dos N eleitores votaram:
• 1, 2, 3 ou 4 para cada candidato.
• 0 (zero) para voto em branco.
• -1 para voto nulo.
Considere que:
• O candidato ganha a eleição se fizer 51% ou mais do total de votos.
• Se não houver ganhador, os dois melhores irão para o segundo turno.
Faça um programa em C que calcule e imprima:
• O candidato vencedor (se houver), seguido da porcentagem de votos obtida. Se não houver vencedor,
 imprima os candidatos que irão ao segundo turno com a respectiva porcentagem de votos obtida.
• A porcentagem obtida pelos demais candidatos.
• A porcentagem de votos em branco e nulos.*/
    tentenovamente:
    printf("----------------------------\n");
    printf("         Urna eleitoral       ");
    printf("\n 1- Tiago\n 2- Pedro\n 3- Alvaro\n 4- Chaves\n 0- Voto em branco\n -1- Voto nulo\n");
    printf("------------------------------\n");

    
    int voto=0,i=0;
    char cont="a";

    do{

    printf("Digite o voto: ");
    scanf("%i",&voto);
    switch (voto){
        case 1:
            tDV.c[0]+=1;
            break;
        case 2:
            tDV.c[1]+=1;
            break;
        case 3:
            tDV.c[2]+=1;
            break;
        case 4:
            tDV.c[3]+=1;
            break;
        case -1:
            tDV.nulos+=1;
            break;
        case 0:
            tDV.brancos+=1;
            break;
        default:
            printf("Escolha invalida!\nTente novamente!\n");
            goto tentenovamente;
    }
    
        i++;
        printf("Quer continuar? [S/N]");
        scanf("%s",&cont);   
    } while (cont=="S");
    


    int totalDeVotos=i+1;
    pV.brancos=tDV.brancos/totalDeVotos;
    pV.nulos=tDV.nulos/totalDeVotos;
    for (int k=0;k<4;k++)
        pV.c[k]=(float)tDV.c[k]/totalDeVotos;
        int vencedor=0;
    printf("pv.c[0]: %.2f\n",pV.c[0]);

    if(pV.c[0]>0.51 && pV.c[0]>pV.c[1] && pV.c[0]>pV.c[2] && pV.c[0]>pV.c[3]){
        vencedor=1;
        printf("Tiago e o vencedor da eleicao com %0.2f %% dos votos",(pV.c[0]*100));
    }
    if(pV.c[1]>0.51 && pV.c[1]>pV.c[0] && pV.c[1]>pV.c[2] && pV.c[1]>pV.c[3]){
        vencedor=1;
        printf("Pedro e o vencedor da eleicao com %0.2f %% dos votos",(pV.c[1]*100));
    }
    if(pV.c[2]>0.51 && pV.c[2]>pV.c[0] && pV.c[2]>pV.c[1] && pV.c[2]>pV.c[3]){
        vencedor=1;
        printf("Alvaro e o vencedor da eleicao com %0.2f %% dos votos",(pV.c[2]*100));
    }
    if(pV.c[3]>0.51 && pV.c[3]>pV.c[0] && pV.c[3]>pV.c[2] && pV.c[3]>pV.c[1]){
        vencedor=1;
        printf("Chaves e o vencedor da eleicao com %0.2f %% dos votos",(pV.c[3]*100));
    }
    /*if (vencedor==0){
        printf("vencedor=0");
    }*/


    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

O seu problema está relacionado com lixo deixado no buffer do teclado após

Em 24/04/2020 em 20:27, JaoOLeigo disse:

scanf("%i",&voto);

A quebra de linha não é lida e permanece no buffer, sendo capturada em

Em 24/04/2020 em 20:27, JaoOLeigo disse:

scanf("%s",&cont);

O que faz o programa prosseguir sem solicitar entrada de dados do usuários. Diante disto, se faz necessária a limpeza do buffer.
Leia mais sobre buffer e como limpá-lo nessa publicação.
Organizei seu código e agora está funcionando. Qualquer dúvida, pergunte.
 

//Importações de bibliotecas
#include <stdio.h>
#include <stdlib.h>

/*Problema:
Em uma eleição para governador concorrem 4 candidatos (1, 2, 3 e 4). No dia da eleição cada
um dos N eleitores votaram:
• 1, 2, 3 ou 4 para cada candidato.
• 0 (zero) para voto em branco.
• -1 para voto nulo.
Considere que:
• O candidato ganha a eleição se fizer 51% ou mais do total de votos.
• Se não houver ganhador, os dois melhores irão para o segundo turno.
Faça um programa em C que calcule e imprima:
• O candidato vencedor (se houver), seguido da porcentagem de votos obtida. Se não houver vencedor,
 imprima os candidatos que irão ao segundo turno com a respectiva porcentagem de votos obtida.
• A porcentagem obtida pelos demais candidatos.
• A porcentagem de votos em branco e nulos.*/

#define TAM 6		//Defina constantes para facilitar posterior adaptação

//Estruturas
typedef struct{
	int id;
    char nome[20];
    int votos;
    float percentual;
} Cand;


//Função principal
int main(){
	//Declaração de variáveis
	int voto=0, total=0, i, j, invalido;
    char continuar;
	Cand candidatos[TAM] = {{1, "Tiago", 0, 0}, {2, "Pedro", 0, 0}, {3, "Alvaro", 0, 0}, {4, "Chaves", 0, 0}, {0, "Branco", 0, 0}, {-1, "Nulo", 0, 0}};
	Cand aux;
	
	//Apresentação
    printf("------------------------------\n");
    printf("         Urna eleitoral       \n");
	for (i=0; i<TAM; i++) printf("%d - %s\n", candidatos[i].id, candidatos[i].nome);
    printf("------------------------------\n");

	//Votação
    do{
		do{
			invalido = 1;		//True
			printf("Digite o voto:\n");
			scanf("%i", &voto);
			for (i=0; i<TAM; i++){
				if (candidatos[i].id == voto){
					invalido = 0;		//False;
					candidatos[i].votos++;
					break;
				}
			}
			if (invalido) printf("~Opcao invalida! Tente novamente.\n");
			else printf("Voto contabilizado com sucesso!\n");
		} while (invalido);
		printf("Deseja realizar outro voto?[S/N]\n");
		fflush(stdin);		//Linpando Buffer
		continuar = getchar();  
    } while (continuar=='S' || continuar=='s');
    
	//Apuração
	for (i=1; i<TAM; i++){	//Ordenação decrescente pelo método da inserção
		aux = candidatos[i];
		for (j = i-1; j>=0 && candidatos[j].votos < aux.votos; j--) candidatos[j+1] = candidatos[j];
		candidatos[j+1] = aux;
	}
	for (i=0; i<TAM; i++) total += candidatos[i].votos;	//Soma dos votos
	for (i=0; i<TAM; i++) candidatos[i].percentual = (float) candidatos[i].votos/total;		//Calculando percentuais
	
	//Exibição de resultados
    printf("------------------------------\n");
    printf("          Resultado        \n");
	for (i=0; i<TAM; i++) printf("%s: %d votos (%.2f%%)\n", candidatos[i].nome, candidatos[i].votos, candidatos[i].percentual*100);
	if (candidatos[0].percentual >= 0.51) printf("---->>>  %s venceu a eleicao <<<----\n", candidatos[0].nome);
	else printf("> Segundo turno entre %s e %s.", candidatos[0].nome, candidatos[1].nome);
    return 0;
}

 

Editado por Hazzu
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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...