0
Hello. I have a big problem to manipulate and create a C file. First I did the whole code using a struct and functions, everything worked right. I put the commands to create the file and it is also ok.
My problem is to open and insert data into it. I have tried several ways and the most I could was to bugle the data saved in the same memory. Follows the code.
P.S. Are in all 8 functions, I will put only the first, not to get too polluted visually the post.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
#include <string.h>
#define MAX 1
struct turma{
int matricula;
char nome[15];
float nota[5];
float media;
char resultado;
}; typedef struct turma turma;
int main()
{
setlocale (LC_ALL, "Portuguese");
printf ("\nFeito por Maximiliano Meyer\n");
turma alg[MAX];
int menu;
FILE *arquivo;
arquivo = fopen("notas.txt","rb+");
if(arquivo==NULL)
{ arquivo=fopen("notas.txt","wb+");
printf("\nO arquivo notas não pôde ser aberto");
if(arquivo==NULL)
{ printf(" O arquivo não pôde ser aberto");
exit(1);
}
}
menu = 0;
while (menu != 8)
{
system("cls");
printf("\n\n Escolha uma opção no menu abaixo:\n\n");
printf(" |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n");
printf(" | 1 - Inserir notas |\n");
printf(" | 2 - Consultar notas |\n");
printf(" | 3 - Alterar dados |\n");
printf(" | 4 - Excluir |\n");
printf(" | 5 - Listagem geral da turma |\n");
printf(" | 6 - Média da turma |\n");
printf(" | 7 - Consultar alunos aprovados |\n");
printf(" | 8 - Sair |\n");
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
scanf("%d", &menu);
printf("\n");
switch (menu)
{
case 1 : system("cls");
insere(alg, arquivo);
printf("\n\aNotas inseridas!\n");
system("Pause");
break;
...other functions....
case 8: system("cls");
printf("Saindo da aplicação\nDesenvolvido por Maximiliano Meyer\n\n");
break;
default:
system("cls");
printf("Opção inválida.\nRevise o valor digitado.\n\n");
system("Pause");
}
}
fclose (arquivo);
}
void insere (FILE *arquivo, turma alg[MAX])
{ turma reg;
arquivo=fopen("notas", "rb+");
int x,y;
float cont=0;
for (x=0;x<MAX;x++)
{ printf("\nInforme os dados do %iº aluno: ", x+1);
printf("\n\nMatrícula: ", x+1);
scanf("%d", &alg[x].matricula);
printf("Nome: ", x+1);
fflush(stdin);
gets(alg[x].nome);
for (y=0;y<5;y++){
printf("%iº nota: ", y+1);
scanf("%f", &alg[x].nota[y]);
cont = cont + alg[x].nota[y];
}
alg[x].media = cont/5;
if (alg[x].media >=7)
alg[x].resultado = 'A';
else
alg[x].resultado = 'R';
}
fseek(arquivo,0,SEEK_SET);
fwrite(®,sizeof(struct turma),1, arquivo);
fclose(arquivo);
}