All pastes #975895 Raw Edit

Someone

public text v1 · immutable
·published 2008-04-07 20:48 UTC
rendered paste body
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct{  // tein structil tiedot ku sil saa vähän helpommin filuihin
	char nimi[40];
	int score;
}scoreja[10];
int hiscore(int pisteet);
int tarkistus(int a);
void ekakerta(void);
void luku();
int main(void){        //testimaini
int a = 2;
hiscore(a);
getch();
return(0);
}
int hiscore(int pisteet){
	char uusinimi[40];
	int uusi,palautus;
	uusi= tarkistus(pisteet); //tarkitusfunktio
	if(uusi<10){                        // jos uusi hiscore
		FILE *tiedosto;
		tiedosto = fopen("HISCORE.DAT","rb+");
		fread(&scoreja,sizeof(scoreja),10,tiedosto);
		printf("Onneksi olkoon uusi HISCORE!!! Syötä nimesi: ");
		scanf("%s",uusinimi);	//pelaajan nimi
		for(int k=9;k>uusi;k--){  //pistetään edelliset nimet yks slotti eteenpäin jotta saadaan uusi nimi ja score väliin
			strcpy(scoreja[k].nimi,scoreja[k-1].nimi);
			scoreja[k].score = scoreja[k-1].score;
		}
		strcpy(scoreja[uusi].nimi,uusinimi);
		scoreja[uusi].score=pisteet;
		tiedosto = fopen("HISCORE.DAT","wb+");
		fwrite(&scoreja,sizeof(scoreja),10,tiedosto);//kirjotetaan uudet tiedot
		luku();
		fclose(tiedosto);
		palautus = 1;
		
	}
	else{
		printf("Ei uutta hiscorea\n\n");
		luku();
		palautus = 0;
	}
	return(palautus);		//palauttaa arvon 1 jos uusi highscore ja 0 jos ei uutta highscorea	
}
void luku(){
	FILE *tiedosto;
	tiedosto = fopen("HISCORE.DAT","ab+");
	fread(&scoreja,sizeof(scoreja),10,tiedosto);
	printf("HISCORELISTA: \n\n\n");
	for(int i=0;i<10;i++){
		printf("%d.\t %s :%d\n",i+1,scoreja[i].nimi,scoreja[i].score);
	}
	getch();
}

int tarkistus(int a){   //kattoo eka et onko tiedostoa hiscore.dat ees olemassa jos ei niin kysyy käyttäjältä luodaanko uusi
	int i;
	FILE *tiedosto;
	tiedosto = fopen("HISCORE.DAT","rb+");
	if(tiedosto == NULL){
		printf("Tiedoston avaus ei onnistunu. Luodaan uusi hiscore.dat");
		ekakerta();          //käy ekakerta funktios luomassa uuden tiedoston
	}
	tiedosto = fopen("HISCORE.DAT","rb+");
	fread(&scoreja,sizeof(scoreja),10,tiedosto);
	for(i=0;i<10;i++){                              // tarkistetaan onko suurempi kuin yksikään hiscorelistassa
		if(scoreja[i].score < a){
			a=i;
			fclose(tiedosto);
			break;                  //hypätään loopista puis jos on uus hiscore
		}
		else{
			 a=10;                 //palautetaan 10 jos ei uutta hiscorea
		}
	fclose(tiedosto);

	}
	return(a);                           //returnataan löytyikö uus hiscore ja monennessa slotissa se on
}


void ekakerta(void){               //luo 10 kertaa eikukaan 0 pisteellä hiscore.dattiin
	FILE *tiedosto;
	tiedosto = fopen("HISCORE.DAT","ab+");
	for(int i = 0;i<10;i++){
		strcpy(scoreja[i].nimi,"eikukaan");
		scoreja[i].score = 0;

	}
	fwrite(&scoreja,sizeof(scoreja),10,tiedosto);
	fclose(tiedosto);
}