Ir ao conteúdo

Duvida em break laço for


zépoa57

Posts recomendados

Postado

Boa noite estou com um problema ao imprimir os dados de um candidato, pois quando eu não preencho todos os dados do #define dados_prefeito 2 ele imprimi o dado abaixo vazio, fiz o teste colocando o break mas apresenta só o primeiro no caso se eu vou cadastrar os dois candidatos. existe alguma maneira que quando eu for cadastrar 1 candidato não apareça este "lixo" de dados abaixo ??

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define dados_prefeito 2
struct prefeito_dados
{
char nome[300];
char partido[300];
char cargo[300];
int num;
int votos_prefeito[300] ;
};
struct prefeito_dados prefeito[dados_prefeito];
int indice_prefeito=0;
char cadastro_sair;

int main()
{
prefeito[indice_prefeito].votos_prefeito[indice_prefeito]=0;

do
{
system("cls");

printf("\t\t\t=================================");
printf("\n\t\t\t\tCADASTRO PREFEITO\n");
printf("\t\t\t=================================\n");

printf("Digite a quantidade de votos-->");
scanf("%d",&prefeito[indice_prefeito].votos_prefeito[indice_prefeito]);
fflush(stdin);
printf("Digite o cargo do candidato -->");
fflush(stdin);
fgets(prefeito[indice_prefeito].cargo,300,stdin);
fflush(stdin);
printf("Digite o numero do candidato -->");
scanf("%d",&prefeito[indice_prefeito].num);
fflush(stdin);
printf("Digite nome do candidato-->");
fgets(prefeito[indice_prefeito].nome,300,stdin);
fflush(stdin);
printf("Digite o partido do candidato -->");
fgets(prefeito[indice_prefeito].partido,300,stdin);
fflush(stdin);
indice_prefeito++;
if(indice_prefeito<=1)
{
printf("Deseja cadastrar novamente s-sim n-nao");
cadastro_sair=getch();
}
else
{
printf("sair");
getch();
}



}while(indice_prefeito<dados_prefeito&&cadastro_sair!='n');


system("cls");
//printf("\nCANDIDATO\t\tCARGO\t\tNUMERO\t\tPARTIDO\tVOTO");
printf("\n");
for(indice_prefeito=0;indice_prefeito<dados_prefeito;indice_prefeito++)
{


prefeito[indice_prefeito].votos_prefeito[indice_prefeito]=prefeito[indice_prefeito].votos_prefeito[indice_prefeito]+1;
printf("\nCANDIDATO %s\t",prefeito[indice_prefeito].nome);
printf("\nCARGO %s\t",prefeito[indice_prefeito].cargo);
printf("\nNUMERO %d\t",prefeito[indice_prefeito].num);
printf("\nPARTIDO %s\t",prefeito[indice_prefeito].partido);
printf("\nVOTO %d\t",prefeito[indice_prefeito].votos_prefeito[indice_prefeito]);


}






printf("\n");

system("pause");

}

Postado
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define dados_prefeito 2
struct prefeito_dados
{
char nome[300];
char partido[300];
char cargo[300];
int num;
int votos_prefeito[300];
};
struct prefeito_dados prefeito[dados_prefeito];
int indice_prefeito=0;
char cadastro_sair;

int main()
{
int c = 0;
prefeito[indice_prefeito].votos_prefeito[indice_prefeito]=0;

do
{
system("cls");

printf("\t\t\t=================================");
printf("\n\t\t\t\tCADASTRO PREFEITO\n");
printf("\t\t\t=================================\n");

printf("Digite a quantidade de votos-->");
scanf("%d",&prefeito[indice_prefeito].votos_prefeito[indice_prefeito]);
fflush(stdin);
printf("Digite o cargo do candidato -->");
fflush(stdin);
fgets(prefeito[indice_prefeito].cargo,300,stdin);
fflush(stdin);
printf("Digite o numero do candidato -->");
scanf("%d",&prefeito[indice_prefeito].num);
fflush(stdin);
printf("Digite nome do candidato-->");
fgets(prefeito[indice_prefeito].nome,300,stdin);
fflush(stdin);
printf("Digite o partido do candidato -->");
fgets(prefeito[indice_prefeito].partido,300,stdin);
fflush(stdin);
indice_prefeito++;
c = c+1;
if(indice_prefeito<=1)
{
printf("Deseja cadastrar novamente s-sim n-nao");
cadastro_sair=getch();
}
else
{
printf("sair");
getch();
}



}while(indice_prefeito<dados_prefeito&&cadastro_sair!='n');


system("cls");
//printf("\nCANDIDATO\t\tCARGO\t\tNUMERO\t\tPARTIDO\tVOTO");
printf("\n");
for(indice_prefeito=0;indice_prefeito<c;indice_prefeito++)
{


prefeito[indice_prefeito].votos_prefeito[indice_prefeito]=prefeito[indice_prefeito].votos_prefeito[indice_prefeito]+1;
printf("\nCANDIDATO %s\t",prefeito[indice_prefeito].nome);
printf("\nCARGO %s\t",prefeito[indice_prefeito].cargo);
printf("\nNUMERO %d\t",prefeito[indice_prefeito].num);
printf("\nPARTIDO %s\t",prefeito[indice_prefeito].partido);
printf("\nVOTO %d\t",prefeito[indice_prefeito].votos_prefeito[indice_prefeito]);


}






printf("\n");

system("pause");

}

Postado

Agumas dicas:

Constantes definidas por #define levam nomes em letras maisculos

Exemplo:

#define MAX 2

mude o nome do variaveis para coisas simples

dados_prefeito poderia ser TAM_MAX (letras miusculas por convenção)

indice_prefeito poderia ser i já que ésóuma variável de iteração

prefeito_dados poderia ser prefeito ou candidato(caberia no contexto);

vai aí seu código com nome de variáveis mais aplicaveis ao algoritmo (só mudei o nome das variáveis);


#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define TAM_MAX 2 //tamanho máximo do vetor de cadidatos. candidato[TAM_MAX]
struct candidato
{
char nome[300];
char partido[300];
char cargo[300];
int num;
int votos[300];
};
struct candidato prefeito[TAM_MAX];
//int indice_prefeito=0; é só uma variável de iteração não precisa ser global
//char cadastro_sair; não precisa ser global

int main()
{
int i; //declara aqui
int n_candidatos; //numeros de candidatos cadastrados
char opcao; //declara aqui
//prefeito[i].votos[i]=0; Pra que isso?
//usaremos uma função init_prefeito() para iniciarmos os dados.

do
{
system("cls");

printf("\t\t\t=================================");
printf("\n\t\t\t\tCADASTRO PREFEITO\n");
printf("\t\t\t=================================\n");

printf("Digite a quantidade de votos-->");
scanf("%d",&prefeito[i].votos[i]);
fflush(stdin);
printf("Digite o cargo do candidato -->");
fflush(stdin);
fgets(prefeito[i].cargo,300,stdin);
fflush(stdin);
printf("Digite o numero do candidato -->");
scanf("%d",&prefeito[i].num);
fflush(stdin);
printf("Digite nome do candidato-->");
fgets(prefeito[i].nome,300,stdin);
fflush(stdin);
printf("Digite o partido do candidato -->");
fgets(prefeito[i].partido,300,stdin);
fflush(stdin);
i++;
c++;
if(i<=1)
{
printf("Deseja cadastrar novamente s-sim n-nao");
opcao=getch();
}
else
{
printf("sair");
getch();
}



}while(i<TAM_MAX&&opcao!='n');


system("cls");
//printf("\nCANDIDATO\t\tCARGO\t\tNUMERO\t\tPARTIDO\tVOTO");
printf("\n");
for(i=0;i<n_candidatos;i++)
{


prefeito[i].votos[i]=prefeito[i].votos[i]+1;
printf("\nCANDIDATO %s\t",prefeito[i].nome);
printf("\nCARGO %s\t",prefeito[i].cargo);
printf("\nNUMERO %d\t",prefeito[i].num);
printf("\nPARTIDO %s\t",prefeito[i].partido);
printf("\nVOTO %d\t",prefeito[i].votos[i]);


}






printf("\n");

system("pause");

}

Agora se você não quer mostrar lixo você cria uma função ou até mesmo um trecho de código que indique que a struct está vazia

void init_candidatos(prefeito vet[TAM_MAX]);

é só usar o nome para indicar que ele está vazio ou não. mas como?

o caractere '\0' é o terminador de string. então se ele estiver na primeira posição da string ela estará vazia. então:

char nome[300];

//se você lê

nome; //lixo

nome[0] = '\0'; \\ela está vazia simples não?

Então essa função precisa iniciar o nome de cada candidato em '\0'(nome[0] = '\0';) e colocar o numero de votos em zero.

AÍ três funções básicas

void init_candidatos(prefeito vet[TAM_MAX]);

int is_null(prefeito a); //verifica se está vazia e retorna 0 se não e 1 se estiver vazia

void del(prefeito vet[TAM_MAX], int pos); //deleta, é só iniciar nome[0] ='\0'; e votos com 0 da posição do vetor

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!