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