Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida em C


Felipy Camargo

Pergunta

#include <stdio.h>
#include <stdlib.h>
calcmed(float calcmede[4], int m){
    int c2;
    float media;
    for(c2=0;c2<m;c2++){
        media+=calcmede[c2];
    }
    return media/m;
}
main(){
    int nmal,l,c,c1,turmas;

    printf("Digite a quantidade de turmas: ");
        scanf("%d", &turmas);
    printf("Digite a quantidade de alunos: ");
            scanf("%d", &nmal);

    float nota[nmal][1][turmas],notas[4];
    char nome[nmal][100][turmas];
    setbuf(stdin,NULL); //limpa teclado
    //começa a pegar dados
    for(c1=0;c1<turmas;c1++){
        for(l=0;l<nmal;l++){
            printf("Digite o %d.o nome: ", l+1);
                gets(nome);
            for(c=1;c<=4;c++){
                printf("Digite a %d.o nota do aluno %s: ", c,nome[l][100][c1]);
                    scanf("%f", &notas[c]);
                    calcmed(notas, 4);
            }
            system("cls");
            setbuf(stdin,NULL);
        }
    }
    //fim pega dados
    printf("==================================================\n");
    printf("               M\202DIA DOS ALUNOS:\n");
    printf("==================================================\n");
    for(c1=0;c1<turmas;c1++){
        for(l=0;l<nmal;l++){
            printf("Nome: %s Nota: %.f\n", nome[l][100][c1],nota[l][0][c1]); //resultado
        }
    }
}

Olá, será que poderia me ajudar a resolver esse problema com a função gets e uma matriz multidimencional?
Não estou conseguindo pegar o nome do aluno no terceiro for, depois do printf("Digite o %d.o nome: ", l+1);, ele não está pulando o programa, aparece uma janela imprimindo parou de funcionar, sem problemas com estouro de dados. Modos que testei:
gets(nome[][100][c1]);
gets(nome[l][100][c1]);
scanf("%d", &nome[][100][c1]);
scanf("%d", &nome[l][100][c1]);
scanf("%c", &nome[l][100][c1]);

No caso, essa forma de pensar está errada e até minha sintaxe, eu procrurei no site cprogressive("mencionou que matrizes passadas para funções primeiro conchete é vazio") falei com a professora e nada. A função gets pode estar obsoleta, mas é a que está na apostila futuramente ou aos poucos vou atualizando o conhecimento. Eu estou tentando colocar o nome na matriz multidimencional, na linha 1(ou 0) o nome, na coluna a "cadeia de caracter" 1(ou 0) e na profundidade a turma 1(ou 0). 
Talvez você recomende ponteiros(como ela citou mas vagamente), vou aprender nas proximas aulas.
 

Editado por Felipy Camargo
escrevi errado ("falta de atenção e ansiedade")
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

A ideia é essa:

char nome[turmas][nmal][100];
float notas[turmas][nmal][4];
int turma, aluno, nota;

for (turma = 0; turma < turmas; turma++){
    for (aluno = 0; aluno < nmal; aluno++){
        printf("Digite o nome do aluno %d da turma %d: ", aluno + 1; turma + 1);
        //Abaixo usei fgets ao invés de gets, pois fgets permite definir o numero
        //maximo de caracteres a serem armazenados no vetor, logo não existe risco
        //de ultrapassar o comprimento do vetor com um nome longo e dar erro.
        fgets(nome[turma][aluno], 100, stdin);
        //Note acima que não passamos a 3a dimensao da matriz nome, pois queremos
        //passar a referencia/endereco de memoria da primeira posicao do vetor de
        //100 caracteres que armazenara a string contendo o nome do aluno. Observe,
        //também que nesse caso não e necessario usar o operador & para obter a
        //referencia, pois por se tratar de um vetor inteiro nesse caso já esta
        //implicito que está passando uma referência e não um valor.
        for (nota = 0; nota < 4; nota++){
            printf("Digite a nota da %da avaliacao: ", nota + 1);
            scanf("%f%*c", &notas[turma][aluno][nota]);
            //Observe a diferenca aqui: Precisamos usar & pois agora passamos 
            //apenas uma posicao da matriz, não um vetor ou uma matriz inteira, 
            //afinal usamos as tres dimensoes da matriz, e nesse caso sem o operador
            //& seria obtido o valor armazenado na posicao, ao invés da referencia 
            //que é o que precisa ser passado para o scanf.
        }
    }
}

 

 

Editado por isrnick
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...