Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como utilizar a Função for em um array de char?

  • Objetivo, criar um programa de banco de dados para cadastro de nomes e notas de alunos.

Como posso utilizar a função for para facilitar o programa abaixo:

#include <stdio.h>

int main(){



printf("Bem vindo ao cadastro de alunos\n");

     int alunos;    
    char nome1[30];
    char nome2[30];
    char nome3[30];
    char nome4[30];
    char nome5[30];
    char nome6[30];
    char nome7[30];
    char nome8[30];
    char nome9[30];
    char nome10[30];


    double nota1;
    double nota2;
    double nota3;
    double nota4;
    double nota5;
    double nota6;
    double nota7;
    double nota8;
    double nota9;
    double nota10;



printf("Quantos Alunos tem sua turma?\n");
printf("(1) 10 Alunos (2) 20 alunos (3) 30 alunos\n");

    scanf("%d", &alunos);
    int numerodealunos; 

    switch(alunos){
        case 1:
        numerodealunos = 10;
        break;
        case 2:
        numerodealunos = 20; 
        break;
        case 3:
        numerodealunos = 30;
        break;

    }
 if(numerodealunos <= 10){

     printf("Digite os nomes dos alunos\n");
    scanf("%s", nome1);
    scanf("%s", nome2);
    scanf("%s", nome3);
    scanf("%s", nome4);
    scanf("%s", nome5);
    scanf("%s", nome6);
     scanf("%s", nome7);
     scanf("%s", nome8);
     scanf("%s", nome9);
     scanf("%s", nome10);

     printf("Nota de %s\n", nome1);
    scanf("%lf", &nota1);
    printf("Nota de %s\n", nome2);
    scanf("%lf", &nota2);
    printf("Nota de %s\n", nome3);
    scanf("%lf", &nota3);
     printf("Nota de %s\n", nome4);
    scanf("%lf", &nota4);
     printf("Nota de %s\n", nome5);
    scanf("%lf", &nota5);
     printf("Nota de %s\n", nome6);
    scanf("%lf", &nota6);
     printf("Nota de %s\n", nome7);
    scanf("%lf", &nota7);
     printf("Nota de %s\n", nome8);
    scanf("%lf", &nota8);
     printf("Nota de %s\n", nome9);
    scanf("%lf", &nota9);
     printf("Nota de %s\n", nome10);
    scanf("%lf", &nota10);


    }


}
2 respostas
solução!

Exemplo usando array

#include <stdio.h>

int main() {
    int alunos;    
    char nome[100][30];
    double nota[100];

    printf("Quantos alunos tem sua turma?\n");
    scanf("%d", &alunos);
    printf("\n");

    for(int i = 0; i < alunos; i++) {
        printf("Informe o nome do aluno[%d]", i);
        scanf("%s", nome[i]);
        printf("Informe a nota do aluno[%d]", i);
        scanf("%lf", &nota[i]);
        printf("\n");
    }

    for(int i = 0; i < alunos; i++) {
        printf("%s: %g \n", nome[i], nota[i]);
    }
}

Para criar um banco de dados, sugiro você pesquisar sobre fprintf e fscanf para trabalhar com arquivos.

Olá Bernardo.

No curso de C parte 3 é ensinado sobre struct, com esse recurso podemos criar algo interessante para o seu programa.

struct aluno
{
    char nome[30];
    double nota;
};
typedef struct aluno ALUNO;

Com esse código criamos o "tipo" ALUNO, que vai ser um tipo especial que vai guardar duas informações, a primeira o nome que é do tipo array de char e a segunda a nota que é do tipo double.

Outra estrutura que faz todo sentido nessa situação é o array, com ele podemos criar uma lista que pode armazenar diversos valores do mesmo tipo. Inclusive esse tipo que acabamos de criar, o ALUNOS.

#include <stdio.h>
struct aluno
{
    char nome[30];
    double nota;
};
typedef struct aluno ALUNO;

int main(){
    printf("Bem vindo ao cadastro de alunos\n");
    ALUNO alunos[30];

  return 0;
}

Aqui criamos um array de ALUNO, que pode armazenar até 30 alunos. Essas duas estruturas, struct e arrays, nos permitiu substituir uma parte grande do código original.

Para limitar o numero de alunos, podemos manter a variável e a entrada do usuário que diz a respeito ao tamanho da turma, numero_de_alunos.

#include <stdio.h>
struct aluno
{
    char nome[30];
    double nota;
};
typedef struct aluno ALUNO;

int main(){
    printf("Bem vindo ao cadastro de alunos\n");
    ALUNO alunos[30];

    printf("Quantos Alunos tem sua turma?\n");
    printf("(1) 10 Alunos (2) 20 alunos (3) 30 alunos\n");

    int numero_de_alunos = 0; 
    scanf("%d", &numero_de_alunos);

   return 0;
}

Com todas essas modificações, podemos fazer um bom uso do for. Vamos analisar linha a linha, para entender exatamente o que está acontecendo:

 for(int i=0; i<numero_de_alunos; i++){

Primeiro, determinamos que nosso for vai funcionar com a variável i e que vai começar no 0 e depois determinamos que i vai até o valor da variável numero_de_alunos e por ultimo que o passo será de 1 em 1 (i++).

    for(int i=0; i<numero_de_alunos; i++){

        printf("Digite o nome do aluno %d: \n", i);
        scanf("%s", alunos[i].nome);

Aqui pedimos para o usuário digitar o nome do aluno, nosso i vai começar em 0, então vamos ter a mensagem "Digite o nome do aluno 1: " e na parte do scanf, vamos acessar o nome do primeiro aluno, utilizando os colchetes alunos[i] e depois acessamos o membro nome, que é onde queremos salvar a entrada do usuário.

    for(int i=0; i<numero_de_alunos; i++){

        printf("Digite o nome do aluno %d: \n", i);
        scanf("%s", alunos[i].nome);

        printf("Nota de %s\n", alunos[i].nome);
        scanf("%lf", &(alunos[i].nota));

    }

Por ultimo, semelhante ao passo anterior, vamos acessar o nome do aluno e depois a nota. Isso vai se repetir de acordo com o tamanho da turma, variando o i então vamos percorrer o array de alunos.

    printf("Lista com os %d alunos\n\n", numero_de_alunos);
    for(int i=0; i<numero_de_alunos; i++){

        printf("Aluno [%d]: Nome: %s Nota: %.2lf\n", i, alunos[i].nome, alunos[i].nota);

    }
    return 0;

Inclui um terceiro momento, onde imprimo as informações de cada aluno, dessa maneira podemos conferir se os dados foram salvos como gostaríamos. O código completo vai ficar assim:

#include <stdio.h>
struct aluno
{
    char nome[30];
    double nota;
};
typedef struct aluno ALUNO;

int main(){
    printf("Bem vindo ao cadastro de alunos\n");
    ALUNO alunos[30];

    printf("Quantos Alunos tem sua turma?\n");
    printf("(1) 10 Alunos (2) 20 alunos (3) 30 alunos\n");

    int numero_de_alunos = 0; 
    scanf("%d", &numero_de_alunos);
    for(int i=0; i<numero_de_alunos; i++){

        printf("Digite o nome do aluno %d: \n", i);
        scanf("%s", alunos[i].nome);

        printf("Nota de %s\n", alunos[i].nome);
        scanf("%lf", &(alunos[i].nota));

    }
    printf("Lista com os %d alunos\n\n", numero_de_alunos);
    for(int i=0; i<numero_de_alunos; i++){

        printf("Aluno [%d]: Nome: %s Nota: %.2lf\n", i, alunos[i].nome, alunos[i].nota);

    }
    return 0;
}

Sei que passei bastante conteúdo que pode ser novo, então sugiro que olhe cada etapa que descrevi e qualquer duvida que apareça pode postar aqui que vou te ajudar.

Novamente recomendo o curso Curso de C III: Recursos avançados da linguagem onde o instrutor vai passar por esses conceitos mais avançados.

Bons Estudos.