Ir ao conteúdo

Problemas na struct


Renanzinthhh

Posts recomendados

Postado

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

Postado

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.

Postado
  Em 17/05/2015 às 21:49, Luminance disse:

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

Postado

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.

Postado

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;		};
  Em 17/05/2015 às 21:30, dyR3X disse:

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

Postado

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

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

 

 

 

  Citação

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;		
Postado
  Em 18/05/2015 às 16:02, wilker.rj disse:

 

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

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!