preciso de ajuda

Kurt99

I folded Myself
Boas eu to a trabalhar num programa em c mas to com alguns problemas alguem me pode ajudar?
o que eu ja fiz é isso mas nao o consigo compiliar:
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
#include <string.h>

struct aluno
{
char nome[20],email[50],rua[50],turma[20];
int numero,bi,sdac,ele,mat;
};
main()
{
int op,i,aux,n,aux2;
menu:
printf(" MeNu\n ");
printf("Escolha uma opcao:\n");
printf("1. Inserir informacaoes sobre os alunos\n2. Mostrar as informacoes sobre os alunos\n3. Mostrar as informacoes sobre todos os alunos\n4. Alterar o registo do aluno\n5. Apagar registo\n");
scanf("%d", &op);
system("cls");
switch (op)
{
case 1:
struct aluno;
int k[30];
aux2=1000;
printf("Quantos alunos quer introduzir\n");
scanf("%d",&aux);

for(i=0;i<aux;i++)
{
printf("Digite o nome do %d aluno\n",i+1);
//fflush(stdin);
//getchar();
gets("%s",k.nome);
printf("Introduza a morada do %d aluno\n");
gets("%s",k.rua);
printf("Introduza o numero do %d aluno\n");
scanf("%d",&k.numero);
printf("Diga a nota do %d aluno na disciplina de sdac\n");
scanf("%s",k.sdac);
printf("Diga a nota do %d aluno na disciplina de eletronica\n");
scanf("%s",k.ele);
printf("Diga a nota do %d aluno na disciplina de matemetica\n");
scanf("%s",k.mat);
printf("Introduza a turma e o ano do %d aluno\n");
gets("%s",k.turma);

system("cls");
goto menu;
}
}
switch (op)
case 2:
struct aluno k[100];
int d;
aux2=1000;
perg:
printf("Qual o numero do aluno que pretende consultar?");
scanf("%d",&d);
for(i=0;i<aux;i++)
{
if(d==k.numeroal){
aux2=i;
}
else{}
}
if(aux2==1000){
printf("\aERRO o numero nao existe");
getch();
system("cls");
goto perg;
}
else{
printf("ALUNO %d\n\nMorada: %s\nNumero do aluno: %d\nNota de sdac: %s\nNota de eletronica: %s\nNota de matematica: %d",aux2+1,k[aux2].nome,k[aux2].numero,k[aux2].rua,k[aux2].numero,k[aux2].sdac,k[aux2].ele,k[aux2].mat,k[aux2].turma);
}

break;

getch();
}
}
e sim eu nao percebo muito de programacao...
 
Última edição:
Não consegues compilar porquê? Dá mais informação.

o Dev-C dá os segintes erros:
In function `int main()':
37: error: `nome' has not been declared
37: error: request for member of non-aggregate type before ')' token
39: error: `rua' has not been declared
39: error: request for member of non-aggregate type before ')' token
41: error: `numero' has not been declared
41: error: request for member of non-aggregate type before ')' token
43: error: `sdac' has not been declared
43: error: request for member of non-aggregate type before ')' token
45: error: `ele' has not been declared
45: error: request for member of non-aggregate type before ')' token
47: error: `mat' has not been declared
47: error: request for member of non-aggregate type before ')' token
49: error: `turma' has not been declared
49: error: request for member of non-aggregate type before ')' token
66: error: `k' undeclared (first use this function)
66: error: (Each undeclared identifier is reported only once for each function it appears in.)
81: error: break statement not within loop or switch
At global scope:
85: error: expected declaration before '}' token
se me poderes ajudar ficava mesmo muito agradecido
 
Para começar, nesses printf() não estás a indicar qual a variável que corresponde ao %d, como fazes no primeiro:

Código:
printf("Digite o nome do %d aluno\n",i+1);

para além disto pareces ter também alguns problemas no alinhamento de parênteses.
 
é impressão minha ou o teu erro está aqui "int k[30];", não devias fazer "struct aluno k[30]"?? é que depois estas a chamar k.nome, etc...
 
O principal erro é o que o metRo_ te apontou. Mas de qualquer forma o teu código está um pouco confuso. O switch testa uma variável e depois consoante os valores dessa variável tens vários casos possíveis. Sendo assim estás a declarar dois switch's desnecessáriamente. Basta-te 1:

switch(op)
case1: <instrucoes> break;
case2: <instrucoes> break;
etc..

Outra coisa e para evitar possíveis esquecimentos.. é boa politica fazeres um typedef à tua struct para não teres que andar smp com ela agarrada ao nome da tua variavel. Sendo assim deves fazer typedef struct _aluno { .. } Aluno , por exemplo! Basta-te depois fazer : Aluno al; em vez de.. struct aluno al; Penso que é mais fácil e evita enganos :D
Cumps!
 
Última edição:
boas
em relacao ao trabalho posso dizer que ja emendei os erros mas to com um problema ele nao me grava em ficheiros!!
algem me pode ajudar?
aki ta o codigo:
Código:
include <stdio.h>
#include <stdlib.h>
typedef struct
{
        char nome[40],morada[40],turma;
        int num,idd,ano;
        float nota1,nota2,nota3,nota4,nota5;
        }ALUNOS;
        
//Introdução de Alunos
void intr (ALUNOS a[10], FILE *fb) //void n devolve qq tipo
{
     int n,i;
     fb=fopen("arquivo.dat","wb");
     printf ("Quantos alunos pretende inserir?\n\n");
     scanf ("%d",&n);
     for(i=0;i<n;i++)
     {
          printf ("Insira o nome do aluno:\n\n");
          getchar(),gets (a[i].nome);fflush (stdin);// getchar le um caracter gets le tds os caracteres introduzidos fflush limpa o teclado
          printf ("Insira a morada do aluno:\n\n");
          getchar();gets (a[i].morada);fflush (stdin);
          printf ("Insira a idade do aluno:\n\n");
          scanf ("%d",&a[i].idd);
          printf ("Insira o ano do aluno:\n\n");
          scanf ("%d",&a[i].ano);
          printf ("Insira a turma do aluno:\n\n");
          scanf (" %c",&a[i].turma);
          printf ("Insira o numero do aluno:\n\n");
          scanf ("%d",&a[i].num);
          printf ("Insira a nota de SDAC:\n\n");
          scanf ("%f",&a[i].nota1);
          printf ("Insira a nota de Portugues:\n\n");
          scanf ("%f",&a[i].nota2);
          printf ("Insira a nota de Ingles:\n\n");
          scanf ("%f",&a[i].nota3);
          printf ("Insira a nota de TIC:\n\n");
          scanf ("%f",&a[i].nota4);
          printf ("Insira a nota de Educacao Fisica:\n\n\n\n");
          scanf ("%f",&a[i].nota5);
          }
     fwrite (a,sizeof(ALUNOS),n,fb);//determina o tamanho de bytes
     fclose (fb);
     } 
//Mostrar todos os alunos
void mostrar (ALUNOS a[10], FILE *fb)
{
     int j,i;
     fb=fopen("arquivo.txt","rb");
     j=fread(a,sizeof(ALUNOS),10,fb);
     printf ("Existem %d alunos\n\n",j);
     for (i=0;i<j;i++)
     {
         printf ("O nome do aluno e: %s\n\n",a[i].nome);
         printf ("A morada do aluno e: %s\n\n",a[i].morada);
         printf ("A idade do aluno e: %d\n\n",a[i].idd);
         printf ("O ano do aluno e: %d\n\n",a[i].ano);
         printf ("A turma do aluno e: %c\n\n",a[i].turma);
         printf ("O numero do aluno e: %d\n\n",a[i].num);
         printf ("A nota do aluno a SDAC e: %.1f\n\n",a[i].nota1);
         printf ("A nota do aluno a Portugues e: %.1f\n\n",a[i].nota2);
         printf ("A nota do aluno a Ingles e: %.1f\n\n",a[i].nota3);
         printf ("A nota do aluno a TIC e: %.1f\n\n",a[i].nota4);
         printf ("A nota do aluno a Educacao Fisica e: %.1f\n\n\n\n",a[i].nota5);
         }
     fclose(fb);
     }
//Mostrar aluno por registo
void registo (ALUNOS a[10],FILE *fb)
{
     int reg,j,i;
     ALUNOS b[10];
     fb=fopen ("arquivo.txt","rb");
     printf ("Qual o registo que pretende visualizar?\n\n");
     scanf ("%d",&reg);
     fseek (fb,(long)(reg-1)*sizeof(ALUNOS),SEEK_SET); //permite nos colocar em qq posiçao no ficheiro
     j=fread(b,sizeof(ALUNOS),10,fb);
     for(i=0;i<1;i++)
     {
              printf ("O nome do aluno e:%s\n\n",b[i].nome);
              printf ("A morada do aluno e: %s\n\n",b[i].morada);
              printf ("A idade do aluno e: %d\n\n",b[i].idd);
              printf ("O ano do aluno e: %d\n\n",b[i].ano);
              printf ("A turma do aluno e: %c\n\n",b[i].turma);
              printf ("O numero do aluno e: %d\n\n",b[i].num);
              printf ("A nota do aluno a SDAC e: %.1f\n\n",b[i].nota1);
              printf ("A nota do aluno a Portugues e: %.1f\n\n",b[i].nota2);
              printf ("A nota do aluno a Ingles e: %.1f\n\n",b[i].nota3);
              printf ("A nota do aluno a TIC e: %.1f\n\n",b[i].nota4);
              printf ("A nota do aluno a Educacao Fisica e: %.1f\n\n\n\n",b[i].nota5);
            }
     fclose (fb);
     }
     
//Mostrar aluno por nome
void procurar (ALUNOS a[10],FILE *fb)
{
     char al[40];
     int i,j;
     ALUNOS b[10];
     fb=fopen ("arquivo.txt","rb");
     printf ("Qual o aluno que pretende visualizar?\n\n");
     scanf ("%s",al);
     j=fread (&b,sizeof(ALUNOS),10,fb);
     for (i=0;i<j;i++)
     {
         if(strstr(b[i].nome,al)) //faz a comparação entre as strings
         {
         printf ("O nome do aluno e:%s\n\n",b[i].nome);
         printf ("A morada do aluno e: %s\n\n",b[i].morada);
         printf ("A idade do aluno e: %d\n\n",b[i].idd);
         printf ("O ano do aluno e: %d\n\n",b[i].ano);
         printf ("A turma do aluno e: %c\n\n",b[i].turma);
         printf ("O numero do aluno e: %d\n\n",b[i].num);
         printf ("A nota do aluno a SDAC e: %.1f\n\n",b[i].nota1);
         printf ("A nota do aluno a Portugues e: %.1f\n\n",b[i].nota2);
         printf ("A nota do aluno a Ingles e: %.1f\n\n",b[i].nota3);
         printf ("A nota do aluno a TIC e: %.1f\n\n",b[i].nota4);
         printf ("A nota do aluno a Educacao Fisica e: %.1f\n\n\n\n",b[i].nota5);
         }
         }
     fclose (fb);
     }
//Alterar o registo
void alterar (ALUNOS a[10],FILE *fb)
{
     int reg,j;
     ALUNOS b[10];
     fb=fopen ("arquivo.txt","r+b");
     printf ("Qual o registo que pretende alterar?\n\n");
     scanf ("%d",&reg);
     j=fread(&b,sizeof(ALUNOS),10,fb);
            printf ("Insira o nome do aluno:\n\n");
            getchar();gets (a[reg-1].nome);fflush;
            printf ("Insira a morada do aluno:\n\n");
            getchar();gets (a[reg-1].morada);fflush (stdin);
            printf ("Insira a idade do aluno:\n\n");
            scanf ("%d",&a[reg-1].idd);
            printf ("Insira o ano do aluno:\n\n");
            scanf ("%d",&a[reg-1].ano);
            printf ("Insira a turma do aluno:\n\n");
            scanf (" %c",&a[reg-1].turma);
            printf ("Insira o numero do aluno:\n\n");
            scanf ("%d",&a[reg-1].num);
            printf ("Insira a nota de SDAC:\n\n");
            scanf ("%f",&a[reg-1].nota1);
            printf ("Insira a nota de Portugues:\n\n");
            scanf ("%f",&a[reg-1].nota2);
            printf ("Insira a nota de Ingles:\n\n");
            scanf ("%f",&a[reg-1].nota3);
            printf ("Insira a nota de TIC:\n\n");
            scanf ("%f",&a[reg-1].nota4);
            printf ("Insira a nota de Educacao Fisica:\n\n\n\n");
            scanf ("%f",&a[reg-1].nota5);
          rewind(fb); //Voltar ao inicio do programa
          fwrite(a,sizeof(ALUNOS),j,fb);
fclose (fb);
}
//Apagar o ficheiro
void apagar (ALUNOS a[10],FILE *fb)
{
     fb=fopen ("arquivo.txt","wb");
     remove ("arquivo.txt");
     fclose (fb);
     }

main()
{
  int n;
  do
  {
      ALUNOS x[10];
      FILE *f;
      system("color 2C"); 
      printf(",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\n");
      printf("|                     MeNu                       |\n");
      printf("|Escolha uma opcao:                              |\n");      
      printf ("|\t1. Introducao de alunos                  |\n|\t2. Mostrar alunos                        |\n|\t3. Mostrar por registo                   |\n|\t4. Mostrar por nome                      |\n|\t5. Alterar registo                       |\n|\t6. Apagar ficheiro                       |\n|\t7. Sair                                  |");
      printf("\n``````````````````````````````````````````````````");
      scanf ("%d",&n);
      switch (n)
      {
             case 1: intr (x,f);break;
             case 2: mostrar (x,f);break;
             case 3: registo (x,f);break;
             case 4: procurar (x,f);break;
             case 5: alterar (x,f);break;
             case 6: apagar (x,f);break;
             case 7: break;
             }
             }
  while(n!=7);
  getch();
}
 
Última edição pelo moderador:
Isso compila? Qual é o compilador? É que estás a usar o getch() sem fazer #include <conio.h>.
Porque é que estás a passar um array de ALUNOS com 10 elementos na função de inserção, se depois pedes para introduzir o nº de alunos que vai ler? Já pensaste que se o utilizador introduzir um n>10 isso vai de vela?
 
sim ele complia e uso o dev
a rasao para eu usar o array é porque isto é para apresentar e ele nunca vai querer escrever muito!!!lol
 
Sim mas não podes ver as coisas dessa maneira. Deves deixar ser o utilizador a escolher quantos quer inserir e não limitar. E da maneira que está, se o n>10 isso estoura.
 
Back
Topo