kobane
09-06-2005, 17:09
devo fare, per esercizio, un programma che :
*legga da un file txt il cognome e la matricola di alcuni studenti
*legga da un secondo file la matricola, voto 1 e voto2
*scriva su un terzo file cognome, matricola e media dei voti.
questo è quello che ho fatto, qualcuno mi da una mano a capire perchè non gira? (Chiedo scusa per eventuali errori da spina, ho cominciato a programmare due settimane fa..)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//definisco costanti
#define FAILURE 1
#define SUCCESS 0
#define LNOME 21
#define LMATRICOLA 7
#define LMAX 50
typedef struct STUDENTI{
char cognome[LNOME];
char matricola[LMATRICOLA];
int votofinale;
}STUDENTI;
//prototipi
FILE *leggoeapro(char *nome, char *access);
int scrivofile(FILE *fp, STUDENTI vet[], int n);
int main(void){
FILE *fp;
char nome[10], end, nm;
STUDENTI vet[LMAX];
int n1, i, j, v1, v2, k;
fp=leggoeapro(nome, "r");
fscanf(fp, "%d",&n1);
i=0;
while (fscanf(fp,"%s%s",vet[i].cognome, vet[i].matricola)!=EOF){
printf("%s\t%s\n",vet[i].cognome, vet[i].matricola);
i++;
}
fclose(fp);
fp=leggoeapro(nome, "r");
while (fscanf(fp, "%s %d %d", nm, &v1, &v2)!=EOF){
for (k=0;k<=i;k++){
if (strcmp(vet[k].matricola,nm)==0){
if(v1!=30 && v2!=30){
vet[k].votofinale=((v1+v2)/2);
}else{
vet[k].votofinale=31;
}
if(vet[k].votofinale<18){
vet[k].votofinale='ins';
}else{
vet[k].votofinale='ND';
}
}
}
}
fclose(fp);
fp=leggoeapro(nome,"w");
for(k=0;k<=i;k++){
fprintf(fp,"%s %s %d",vet[k].cognome, vet[k].matricola, vet[k].votofinale);
}
scanf("%s",end);
return(SUCCESS);
}
//Legge il nome di un file e me lo apre
//mi ritorna un file pointer, e mi dice se il file esiste.
FILE *leggoeapro (char *nome, char *access)
{
FILE *fp = NULL;
printf ("Nome file: ");
scanf ("%s", nome);
fp = fopen (nome, access);
if (fp == NULL) {
fprintf (stderr, "\nErrore apertura file.\n");
}
return (fp);
}
Grazie a tutti quelli che con pazienza mi potranno aiutare :)
*legga da un file txt il cognome e la matricola di alcuni studenti
*legga da un secondo file la matricola, voto 1 e voto2
*scriva su un terzo file cognome, matricola e media dei voti.
questo è quello che ho fatto, qualcuno mi da una mano a capire perchè non gira? (Chiedo scusa per eventuali errori da spina, ho cominciato a programmare due settimane fa..)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//definisco costanti
#define FAILURE 1
#define SUCCESS 0
#define LNOME 21
#define LMATRICOLA 7
#define LMAX 50
typedef struct STUDENTI{
char cognome[LNOME];
char matricola[LMATRICOLA];
int votofinale;
}STUDENTI;
//prototipi
FILE *leggoeapro(char *nome, char *access);
int scrivofile(FILE *fp, STUDENTI vet[], int n);
int main(void){
FILE *fp;
char nome[10], end, nm;
STUDENTI vet[LMAX];
int n1, i, j, v1, v2, k;
fp=leggoeapro(nome, "r");
fscanf(fp, "%d",&n1);
i=0;
while (fscanf(fp,"%s%s",vet[i].cognome, vet[i].matricola)!=EOF){
printf("%s\t%s\n",vet[i].cognome, vet[i].matricola);
i++;
}
fclose(fp);
fp=leggoeapro(nome, "r");
while (fscanf(fp, "%s %d %d", nm, &v1, &v2)!=EOF){
for (k=0;k<=i;k++){
if (strcmp(vet[k].matricola,nm)==0){
if(v1!=30 && v2!=30){
vet[k].votofinale=((v1+v2)/2);
}else{
vet[k].votofinale=31;
}
if(vet[k].votofinale<18){
vet[k].votofinale='ins';
}else{
vet[k].votofinale='ND';
}
}
}
}
fclose(fp);
fp=leggoeapro(nome,"w");
for(k=0;k<=i;k++){
fprintf(fp,"%s %s %d",vet[k].cognome, vet[k].matricola, vet[k].votofinale);
}
scanf("%s",end);
return(SUCCESS);
}
//Legge il nome di un file e me lo apre
//mi ritorna un file pointer, e mi dice se il file esiste.
FILE *leggoeapro (char *nome, char *access)
{
FILE *fp = NULL;
printf ("Nome file: ");
scanf ("%s", nome);
fp = fopen (nome, access);
if (fp == NULL) {
fprintf (stderr, "\nErrore apertura file.\n");
}
return (fp);
}
Grazie a tutti quelli che con pazienza mi potranno aiutare :)