1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

preciso de ajuda

Discussão em 'Programação' iniciada por Kurt99, 1 de Maio de 2008. (Respostas: 10; Visualizações: 817)

  1. Kurt99

    Kurt99 Power Member

    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: 1 de Maio de 2008
  2. Não consegues compilar porquê? Dá mais informação.
     
  3. Kurt99

    Kurt99 Power Member

    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
     
  4. 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.
     
  5. Kurt99

    Kurt99 Power Member

    diz me uma coisa porque ele ta a dar erro nos gets?
     
  6. metRo_

    metRo_ Power Member

    é 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...
     
  7. 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: 1 de Maio de 2008
  8. Kurt99

    Kurt99 Power Member

    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: 5 de Junho de 2008
  9. Baderous

    Baderous Banido

    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?
     
  10. Kurt99

    Kurt99 Power Member

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

    Baderous Banido

    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.
     

Partilhar esta Página