Linguaggio predefinito C, programma che uso DevC++.
Sto sviluppando un nuovo esercizio che chiede i seguenti punti:
1. L'autore deve far stampare a schermo il proprio nome e cognome che devono essere conservati in opportuni campi di una struttura;
2. Caricare in RAM tutte le eventuali informazioni già presenti in un file prefissato (pagelle.txt);
3. Inserire un nuovo studente nell'elenco inserendo nome, cognome, classe e voti ottenuti in pagella (codificati con unsigned int) (Le materie sono: italiano, matematica, informatica, religione);
4. Visualizza a schermo tutti gli elementi presenti nell'elenco;
5. Cerca studente per cognome (richiedere il cognome, cercare il cognome nel menù, stampare a schermo i dati di tutti gli studenti con quel cognome;
6. Salvare una pagella su un file (richiedere cognome dello studente, visualizza a schermo i risultati, salvare su un file con nome a piacere).
Ho già sviluppato il 1° e 3° punto, riesco a compilare, il programma parte, ma dopo che ho inserito nome, cognome, classe es i voti, non mi salva i dati nel file ed il programma si blocca.
Ecco il codice:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_CHARS 50
#define MAX_ELEM 100
#define FILE_PRED "pagelle.txt"
struct studente {
char nome [MAX_CHARS];
char cognome [MAX_CHARS];
} io={"Pinco","Pallino"};
struct pagelle {
char nome [MAX_CHARS];
char cognome [MAX_CHARS];
char classe [MAX_CHARS];
int italiano [2];
int matematica [2];
int informatica [2];
int religione [2];
};
//PROTOTIPI
int inserisci (struct pagelle elenco_pagelle[], int n);
int main(int argc, char *argv[]) // Inizio programma
{
struct pagelle elenco_pagelle [MAX_ELEM];
printf("\nAutore del programma:"); //Stampa i dati dell'autore
printf("\n-------------------------");
printf("\n Nome: %s\n Cognome: %s",io.nome,io.cognome);
printf("\n-------------------------");
int n=0;
int scelta;
do {
printf("\n Seleziona cio' che desideri fare:");
printf("\n 1. Inserisci nuovo studente");
printf("\n 2. ");
printf("\n 3. ");
printf("\n 4. ");
printf("\n 0. Esci");
printf("\n\nScegli: ");
scanf("%d",&scelta);
switch (scelta) {
case 1: {
n=inserisci (elenco_pagelle,n);
break;
}
case 0: {
exit(0);
break;
}
}
}
while(scelta!=0);
system("pause");
return 0;
}
int inserisci (struct pagelle elenco_pagelle[], int n) {
if(n>MAX_ELEM) {
printf("Non puoi aggiungere altri studenti\n");
system("pause");
return n;
}
printf("\nNon iserire spazi e/o lettera accentate\n");
printf("\nInserisci nome: ");
scanf("%s",elenco_pagelle[n].nome);
printf("\nInserisci cognome: ");
scanf("%s",elenco_pagelle[n].cognome);
printf("\nInserisci classe: ");
scanf("%s",elenco_pagelle[n].classe);
printf("\nInserisci voto italiano: ");
scanf("%u",elenco_pagelle[n].italiano);
printf("\nInserisci voto matematica: ");
scanf("%u",elenco_pagelle[n].matematica);
printf("\nInserisci voto informatica: ");
scanf("%u",elenco_pagelle[n].informatica);
printf("\nInserisci voto religione: ");
scanf("%u",elenco_pagelle[n].religione);
printf("\n\n");
FILE*fp=fopen(FILE_PRED,"a");
if(fp==NULL) {
printf("Impossibile salvare!\n");
}
else {
fprintf(fp,"%s %s %s %u %u %u %u",elenco_pagelle[n].nome,elenco_pagelle[n].cognome,elenco_pagelle[n].classe,elenco_pagelle[n].italiano,elenco_pagelle[n].matematica,elenco_pagelle[n].informatica,elenco_pagelle[n].religione);
printf("------------SALVATO------------\n\n");
fclose(fp);
}
return n;
}
Cos'è che non va?
Per il numero 2 dell'esercizio non so come devo fare. Se potete dirmi come fare bene, ma prima bisogna risolvere il problema dell'inserimento di un nuovo studente.