Ir ao conteúdo
  • Cadastre-se

Problemas na struct


Posts recomendados

Gente, me tira uma dúvida, fiz uma struct aqui no meu prog, sendo que quando vou dar valor as variáveis dessa struct, eu nem termino e ja pula pro case 2, porque?


PS: struct montada a partir da linha 14 e ela está sendo usada na case 1.


 


https://ghostbin.com/paste/8vynu



/* Programa
Programa: Informações do aluno
Autor: Renan Thiago de A. Narciso
Data:13/05/2015
Descrição:-------

*/

#include <stdio.h>
#include <locale.h>
#include <conio.h>
#include <stdlib.h>

struct dados{
char materia[30];
float nota1, nota2, nota3;
};
struct dados aluno;

int main(void){
setlocale(LC_ALL,"Portuguese"); //Selecionando a linguagem do programa para pt-BR

/* Aqui vão as declaracoes das variaveis */
int a = 0; //Declarando variável para controle de menu.

int na, no; //Variáveis da case 1.
char mat;
int pe, pa, per; //Variáveis da case 2.

int m=0, n; //Varíaveis da case 3.

/* Aqui vão os comandos do programa */
do{
printf("\t\t\t********************************\n\n");
printf("\t\t\t* MENU PRINCIPAL DO PROGRAMA *\n\n");
printf("\t\t\t********************************\n\n");
printf("1 - Registrador de notas.\n");
printf("2 - Quantos periodos faltam para conclusão do seu curso.\n");
printf("3 - Identificador de números pares e ímpares.\n\n");
printf("4 - Sair.\n\n");
printf("Informe a opção desejada: ");
scanf("%d", &a); // Armazena o número digitado.
system("cls"); // Limpa a tela.
switch(a){
case 1: //Opção 1//
printf("Você entrou na opção Registrador de notas.\n");
printf("\nDigite a quantidade de matérias: ");
scanf("%d", &no);
printf("Nome da matéria: ");
fflush(stdin);
fgets(aluno.materia, 30, stdin);
printf("Informe a 1º nota: ");
scanf("%.2f", &aluno.nota1);
printf("Informe a 2º nota: ");
scanf("%.2f", &aluno.nota2);
printf("Informe a 3º nota: ");
scanf("%.2f", &aluno.nota3);
break;

case 2: //Opção 2//
printf("Você entrou na opção de períodos do curso.\n\n");
while(1==1){
printf("Digite a quantidade de períodos do seu curso: ");
scanf("%d", &pe);
printf("Em qual período você está: ");
scanf("%d", &pa);
if(pa>0){
per=pe - pa;
printf("\nFaltam %d perídos para concluir seu curso!", per);
break;
}
else
printf("Número inválido!\n");
}
printf("\n\n\nPressione uma tecla para voltar ao menu principal.");
getch();
system("cls");
break;

case 3: //Opção 3//
printf("Você entrou na opção de dentificador de números pares e ímpares.\n");
printf("Digite a quantidade de números: ");
scanf("%d", &n);
printf("\n");
while(m<n){m++;
if(m%2==0){
printf("Números pares: %2.0d\n", m);
}
else{
printf("Números Ímpares: %2.0d | ", m);
}
}
printf("\n\n\nPressione uma tecla para voltar ao menu principal.");
getch();
system("cls");
break;

default:
a = 4;
printf("\t\t\t\n\n\nSaindo do programa...\n\n\n");
}
} while(a != 4); // Enquanto a letra 'a' for diferente de 3, sai do programa.

system("pause");
return 0;
}

Link para o comentário
Compartilhar em outros sites

Aqui está o erro.

struct dados aluno;

Basta mudar para:

dados aluno;

Da maneira que você colocou, é como se você declarasse uma nova estrutura. Não há necessidade de colocar struct ao implementar a herança.

Link para o comentário
Compartilhar em outros sites

Aqui está o erro.

struct dados aluno;

Basta mudar para:

dados aluno;

Da maneira que você colocou, é como se você declarasse uma nova estrutura. Não há necessidade de colocar struct ao implementar a herança.

Luminance acredito que esse seu jeito está errado, andei vendo na internet e fiz do jeito que ensinaram...

Link para o comentário
Compartilhar em outros sites

O jeito que você implementou está errado.

 

Você somente insere a keyword “struct” quando quer declarar uma nova estrutura, não implementá-la.

 

Quando você quer que os componentes de uma struct sejam passados para outra (herança), não se coloca struct.

 

Outra coisa, retire os ponteiros para a struct “aluno”, sua estrutura não foi implementada com ponteiros, então não há necessidade.

Link para o comentário
Compartilhar em outros sites

Então ao invés de ficar:

	struct dados{			char materia[30];			float nota1;			float nota2;			float nota3;		};		struct dados aluno;

Fica somente?

	struct dados{			char materia[30];			float nota1;			float nota2;			float nota3;		};

coloque fflush (stdin); após cada declaração de scanf, e acredito que vai resolver.

 

dyR3X, fiz isso que você pediu, deu certo, ai resolvi implementar while para repetir as perguntas dentro dela, sendo que o while nem roda todo e o programa ja mostra "Programa parou de funcionar".

o que seria?

 

Edit: Luminance, removi a linha " struct dados aluno; "

e o programa não compilou, aparecendo este erro:

 

2369c4c2f23b44508990a649cad44bc7.png

 

Código atualizado: https://ghostbin.com/paste/z5s74

Link para o comentário
Compartilhar em outros sites

Oi @Renanzinthhh dei destaque para o fragmento do seu código (logo abaixo) onde mencionastes o erro.

Observei então que o objeto aluno não foi declarado antes, estou falando de aluno.materia e etc... Por tanto haveria erro 

em tempo de copilação, estranho não ter ocorrido antes. Enfim declare o objeto assim e possivelmente o erro sumirá:

 

struct dados aluno = { {0} }; //com isso corrige o erro!

Minha conclusão é que estava certo antes.

while(na<no){na++;	printf("Nome da matéria: ");	fflush(stdin);	fgets(aluno.materia, 30, stdin);	printf("Informe a 1º nota: ");	scanf("%.2f", &aluno.nota1);	fflush (stdin);	printf("Informe a 2º nota: ");	scanf("%.2f", &aluno.nota2);	fflush (stdin);	printf("Informe a 3º nota: ");	scanf("%.2f", &aluno.nota3);	fflush (stdin);	}
Link para o comentário
Compartilhar em outros sites

Nesta linha acredito que você estava querendo definir um tipo(nome) para usar como esta estrutura. 

 

 

 

struct dados aluno;

 

 

 

Para que seja possível você deve usar o typedef alterando o código para o seguinte:

 


		typedef struct dados{			char materia[30];			float nota1, nota2, nota3;		}aluno;		
Link para o comentário
Compartilhar em outros sites

 

Nesta linha acredito que você estava querendo definir um tipo(nome) para usar como esta estrutura. 

 

 

 

 

Para que seja possível você deve usar o typedef alterando o código para o seguinte:

 

		typedef struct dados{			char materia[30];			float nota1, nota2, nota3;		}aluno;		

 

 

Também funciona..

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...