Programa em c, repetição

30/11/2017

0

C

Bom dia galera, estou com um probleminha com meu codigo em C, ele registra votos em um arquivo .dat. MInha dúvida é a seguinte, quando ele chega na opção para confirmar voto, se eu digitasse 0(não), ele teria que voltar ao inicio, na parte onde pede para digitar o numero do candidato. Tentei varias maneiras inclusive usando while, e não deu certo, pode ser que seja só questão de logica, mas como sou novato ainda nessa area, não consegui decifrar esse enigma hehehe. Agradeço a ajuda se possível!
Programa:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct cadastro
{
   int numero;
   char nome[100];
   int partido;
};

struct cadastro candidatos;

void procurar();

int main()
{

struct cadastro c;
FILE *fp;
	FILE *fp2;
	int continua = 1;
	int numero = 0;
	int voto = 0;
	int opcao = 10;

	printf("=============================\\\\\\\\\\\\\\\\n");
	printf("Digite o número do candidato: ");
	scanf("%d", &numero);

	fp = fopen("principal.dat", "rb");

	if (fp == NULL)
	{
		printf("////////////////////////\\\\\\\\\\\\\\\\n");
		printf("Erro ao abrir o arquivo!\\\\\\\\\\\\\\\\n");
		printf("////////////////////////\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\n");
	}
	else
	{
		printf("///////////////////////////\\\\\\\\\\\\\\\\n");
		printf("Arquivo aberto com sucesso!\\\\\\\\\\\\\\\\n");
		printf("///////////////////////////\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\n");
	}
	while (numero != c.numero && continua == 1)
	{
		fread ( &c, sizeof(c), 1, fp);

		if (feof(fp))
		{
			printf("*************\\\\\\\\\\\\\\\\n");
			printf("Procurando...\\\\\\\\\\\\\\\\n");
			printf("*************\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\n");
			continua = 0;
			printf("/////\\\\\\\\\\\\\\\\n");
			printf("Erro!\\\\\\\\\\\\\\\\n");
			printf("/////\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\n");
		}
	}
	if (continua != 0)
	{
		printf("******************\\\\\\\\\\\\\\\\n");
		printf("Nome: %s\\\\\\\\\\\\\\\\n", c.nome);
		printf("Número: %d\\\\\\\\\\\\\\\\n", c.numero);
		printf("Partido: %d\\\\\\\\\\\\\\\\n", c.partido);	
		printf("******************\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\n");

		printf("Confirmar voto? 1 - SIM, 0 - NÃO\\\\\\\\\\\\\\\\n");
		scanf ("%d", &opcao);

		if (opcao == 1)
		{
			fp2 = fopen("urna.dat", "ab");

			if (fp == NULL || fp2 == NULL)
			{
				printf("Erro na abertura do arquivo!\\\\\\\\\\\\\\\\n");
			}
			else
			{
				printf("******************\\\\\\\\\\\\\\\\n");
				printf("Nome: %s\\\\\\\\\\\\\\\\n", c.nome);
				printf("Número: %d\\\\\\\\\\\\\\\\n", c.numero);
				fwrite(&c, sizeof(c), 1, fp2);
			}
		}
		fclose(fp2);
		printf("Voto confirmado!\\\\\\\\\\\\\\\\n");
	
	}
	else
	{
		printf("***********************************\\\\\\\\\\\\\\\\n");
		printf("Desculpe, candidato não encontrado!\\\\\\\\\\\\\\\\n");
		printf("***********************************\\\\\\\\\\\\\\\\n\\\\\\\\\\\\\\\\n");
	}

	fclose(fp);
	system("pause");
}
Elias

Elias

Responder

Post mais votado

30/11/2017

Boa tarde, Elias.
Precisa dentro do while. Porém nesse caso seria interessante você usar o "do{}while()", onde primeiro você informaria todos os dados e depois fária o teste. Não irei colocar seu código todo, mas vou deixar um exemplo abaixo.

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

int main()
{
	int opcao = 0;
		
	do{
		// Você coloca todos seu código que precisa ser repetido, após efetuar o teste.
		
		printf("Confirmar voto: 1-Sim e 0-Nao: ");
		scanf("%d",&opcao);
		
	}while(opcao == 0 );
	
	printf("Saimos do loop");
}


ps: a variável opcao tem que está declarada antes da estrutura do{}while(). Conforme exemplo.
Abraço, boa sorte.

Marcelo Santana

Marcelo Santana
Responder

Mais Posts

30/11/2017

Elias

Valeu Marcelo, deu certinho...Agradeço o tempinho que tiveste para me dar essa dica na qual não havia entendido. Tenha um ótimo dia, grande abraço!
Responder

30/11/2017

Marcelo Santana

Valeu rapaz. Obrigado pelo retorno. :)<br />
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar