Programa em c, repetição
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 candidatos;
struct cadastro c;
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
Curtidas 0
Melhor post
Marcelo Santana
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.
ps: a variável opcao tem que está declarada antes da estrutura do{}while(). Conforme exemplo.
Abraço, boa sorte.
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.
GOSTEI 1
Mais Respostas
Elias
30/11/2017
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!
GOSTEI 0
Marcelo Santana
30/11/2017
Valeu rapaz. Obrigado pelo retorno. :)<br />
GOSTEI 0