Escreva um programa para ler o nome e a nota de 5 alunos e armazene em um arquivo, em C

Estou com dificuldades para fazer esse código, podem me ajudar a resolver.
Escreva um programa para ler o nome e a nota de 5 alunos e armazene em um arquivo.
A resposta ficaria assim:
Exemplo de saída:

Estudante número 1:
Entre o nome: fabio
Entre a nota: 10
Estudante número 2:
Entre o nome: paulo
Entre a nota: 6
Estudante número 3:
Entre o nome: ana
Entre a nota: 8
Estudante número 4:
Entre o nome: pedro
Entre a nota: 6
Estudante número 5:
Entre o nome: alice
Entre a nota: 7

Arquivo Gerado:

Nome: fabio, Nota = 10
Nome: paulo, Nota = 6
Nome: ana, Nota = 8
Nome: pedro, Nota = 6
Nome: alice, Nota = 7

Nelimaria, seja bem vinda ao fórum.

O que você já conseguiu fazer?

Olá, você já fez alguma coisa?
Eu posso ter dar uma ideia?
Bem, você poderia começar com um laço de repetição, como por exemplo um for, com a variável “i” indo de 0 até 4 para pegar essas informações de nome e nota do usuário, depois disso, para armazenar essas informações em um arquivo de texto por exemplo você poderia usar o comando fputs que basicamente serve para gravar uma string no arquivo que você passar como argumento.
É isso, espero ter ajudado e qualquer coisa é só perguntar, ok? :grin:

Olá, vc está me ajudando sim. Mas ainda estou com problemas, estou me confundindo.Não consigo fazer o laço. O arquivo é criado, mas … Veja o que fiz:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

void main(){

setlocale(LC_ALL, "Portuguese");

char nome[20];
double nota[5];
int i;
int j;
int matriz;

// criando a variável ponteiro para o arquivo
FILE *pont_arq;

printf("\nEstudante número 1:");
printf("\nEntre com o nome: ");
scanf("%d", &nome);
printf("Entre com a nota: \n");
scanf("%d", &nota);

printf("\nEstudante número 2:");
printf("\nEntre com o nome: \n");
scanf("%d", &nome);
printf("Entre com a nota: \n");
scanf("%d", &nota);

printf("\nEstudante número 3:");
printf("\nEntre com o nome: \n");
scanf("%d", &nome);
printf("Entre com a nota: \n");
scanf("%d", &nota);

printf("\nEstudante número 4:");
printf("\nEntre com o nome: \n");
scanf("%d", &nome);
printf("Entre com a nota: \n");
scanf("%d", &nota);

printf("\nEstudante número 5:");
printf("\nEntre com o nome: \n");
scanf("%d", &nome);
printf("Entre com a nota: \n");
scanf("%d", &nota);

/*Mostra toda a matriz gerada
 for (i = 0; i < 4; i++)
{
    for (j = 0; j < 4; j++)
    {
        printf(" %d", matriz[i][j]);
    }

    printf("\n");
}*/

//abrindo o arquivo
pont_arq = fopen("arquivo.txt", "a");

// fechando arquivo
fclose(pont_arq);

//mensagem para o usuário
puts("\nArquivo Gerado!");

system(“pause”);
}

Isso mesmo, você esta indo muito bem!

Certo, vamos lá, um uma estrutura de laço serve para executar um bloco de código por um determinado número de vezes, o mais simples de se usar é o “for”, veja:

A estrutura básica para o “for” funcionar é essa, precisamos primeiro declarar uma variável inteira, após isso teremos que informar o valor inicial dessa variável, no nosso caso 0, dizer qual será o intervalo que queremos que seja executado o nosso código, nesse caso até quando o valor da nossa variável i for menor que 5 por fim dizer se a nossa variável será incrementada (++) ou decrementada (–), nesse caso será incrementada até chegar ao valor 5.

Obs: Caso nossa variável fosse decrementada o nosso código entraria em um loop infinito, pois começaria no 0, iria decrementar e nunca chegaria ao valor de parada pois todos os valores subsequentes seria sempre menores que 5.

Nesse exemplo o computador me retorna os valores de 0 até 4, pois todos esses valores são menores que que 5, quando chegasse ao 5 ele iria compara, 5 é menor que 5? Não, encerra-se aqui.

Bem, voltando ao seu código, fiz algumas alterações no seu código, ele ficou assim:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main(void) {
  setlocale(LC_ALL, "Portuguese");

  char nome[20];
  char nota[20];
  int i;

  // criando a variável ponteiro para o arquivo
  FILE *pont_arq;

  //abrindo o arquivo
  pont_arq = fopen("arquivo.txt", "w+");
  
  for(i = 0; i < 5; i++){
    printf("\nEstudante número %d:", i+1);
    printf("\nEntre com o nome: ");
    scanf("%s", nome);
    printf("Entre com a nota: ");
    scanf("%s", nota);

    //escrevendo no arquivo
    fputs("Nome: ", pont_arq);
    fputs(nome, pont_arq);
    fputs(", Nota: ", pont_arq);
    fputs(nota, pont_arq);
    fputs("\n", pont_arq);
  }
  
  // fechando arquivo
  fclose(pont_arq);

  //mensagem para o usuário
  printf("\nArquivo Gerado!");

  system("pause");
}

Transformei o nome e a nota em vetores de caracteres para ficar melhor na hora de escrever no arquivo.

Mudei o pont_arq = fopen("arquivo.txt", "a"); para pont_arq = fopen("arquivo.txt", "w+");, o “w+” passa para o comando as informações que queremos criar um arquivo texto para leitura e gravação.

Fiz um “for” na parte onde os dados são inseridos. Nessa parte eu adicionei a função fputs, aquela que eu tinha te falado, vi que você esqueceu de colocar, sem ela não conseguimos escrever no arquivo, com ela eu fui passando cada parte do texto uma por uma.

Depois disso o programa fecha o arquivo e printa uma mensagem: “Arquivo Gerado!”.

É isso!

3 curtidas

Boa tarde!

Obrigada! Obrigada! Sem o que falar para te agradecer!
Obrigada!
Estou finalizando uma disciplina da faculdade, e ainda estou com muitas dificuldades. Mas não posso reprovar. Vc me ajudou muito. Super agradecida!!! Muito sucesso na sua trajetória de vida!

Atenciosamente.
Nelimária:grinning: