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: 845)

  1. Kurt99

    Kurt99 I fold therefore I AM

    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 I fold therefore I AM

    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 I fold therefore I AM

    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 I fold therefore I AM

    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 I fold therefore I AM

    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