Ir ao conteúdo
  • Cadastre-se

C Programa em c, repetição


zanuzo

Posts recomendados

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);

}

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@zanuzo    para repetir você pode colocar um do / while e use a variável opcao para controlar as repetições,   então acrescentei esse loop no seu código :

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
struct cadastro{
    int numero;
    char nome[100];
    int partido;
};
struct cadastro candidatos;
void procurar();
int main(){
    struct cadastro c[5];
    FILE *fp;
    FILE *fp2;
    int numero = 0,i;
    int opcao;
    setlocale(LC_ALL,"");

    c[0].numero  = 8;
    c[0].partido = 5;
    strcpy(c[0].nome,"lolipop");
    remove("principal2.dat");
    fp = fopen ("principal2.dat", "ab"); /*//correto, ab para append e binario*/
    if (fp == NULL) {
        printf ("Erro ao abrir o arquivo.\n");
        exit(1);
    }
    else{
        printf ("Arquivo Binario criado com sucesso.\n");
        fseek(fp, 0, SEEK_SET);/*aponta para o inicio do arquivo */
        fwrite(&c, sizeof(struct cadastro), 1, fp);/*do jeito que grava lê*/
    }
    fclose (fp);

    do{
        int continua = 1;i=0;
        opcao = 0;
        printf("=============================\n");
        printf("Digite o número do candidato: ");
        scanf("%d", &numero);
        fp = fopen("principal2.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[i].numero && continua == 1) {
            fread ( &c, sizeof(struct cadastro), 5, fp);
            i++;
            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[i].nome   );
            printf("Número: ---> %d\n",c[i].numero );
            printf("Partido: --> %d\n",c[i].partido);
            printf("**************************\n\n");
            printf("Confirmar voto? 1 - SIM, 0 - NÃO\n");
            scanf ("%d", &opcao);
            if (opcao == 1) {
                remove("urna.dat");
                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[i].nome   );
                    printf("Número: -->%d\n", c[i].numero);
                    fseek(fp2, 0, SEEK_SET);
                    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);
    }while(opcao == 0);
    return 0;
}

então coloquei para gravar o arquivo com estes dados e o número do candidato é 8 , como está  escrito no código.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!