Some backstory
I'm an engineering student (first year) and we had to create a program that could manage a list of students. Basically putting information of students in an array of structs (student name, birth date, grades). It had to be possible to add students, delete students, sort students, change information, add grades, save progress, load progress and generate a mark list(html/css).
My problem
I wanted to add settings to my project. I put some information in a file I called settings.txt. The first and second line are integers and can be 1 or 0. The third line is a string. Creating this file and reading from the file works fine, but of course I wanted the user to be able to change his settings too. However, when I run the code below, my .exe crashes. It's probably because of something stupid I'm doing but I've been looking at this for a couple of hours now and my 'fixes' make things worse. I hope someone can help me, thanks in advance! :)
I tried adding some comments in english, originally the outputs in printf were dutch. If anything is unclear, please ask!
Code
char getBool (char option[], char booly[]) {
if (option[0]!='0') {
strcpy(booly,"true");
} else {
strcpy(booly,"false");
}
}
char editSettings (char settings[], char startLoad[]) {
//This function will allow the user to edit some settings
//Declare variables: file: filename, lijn: storage for xth line of file,booly: true/false output. Settings:reset: 1/0,load: 1/0,startfile: filename
char file[15]="settings.txt",lijn[25],booly[10],reset,load,startfile[25];
int inp,i;
do {
i=1;
//Read file and output current settings to user
FILE * bestand;
bestand=fopen(file,"rt");
fgets(lijn,999,bestand);
while (!feof(bestand)) {
//i determines what line we're on -> There are always 3 lines
//1st line can be 0 or 1 -> Reset screen after cmd?
//2nd line can be 0 or 1 -> Load file
//3th line is a string (filename) -> .txt is automatically added when loading file
getBool(lijn,booly);
if (i==1) {
printf("%d - Reset screen after every command: %s\n",i,booly);
reset=lijn;
} else if (i==2) {
printf("%d - Load file on startup: %s\n",i,booly);
load=lijn;
} else if (i==3) {
strcpy(startfile,lijn);
}
fgets(lijn,999,bestand);
i++;
}
fclose(bestand);
printf("Pick a setting to change or enter 0 to cancel.\nChoose: ");
//Let user choose a value: 0, 1 or 2. Anything else won't
inp=inlezen("012");
printf("\n");
//Process users choice
if (inp=='1') {
//Toggle reset option, remain other options
bestand=fopen(file,"wt");
if (reset=='0') {
reset='1';
} else if(reset=='1') {
reset='0';
}
fprintf(bestand,"%s\n",reset);
fprintf(bestand,"%s\n",load);
fprintf(bestand,"%s\n",startfile);
fclose(bestand);
} else if (inp=='2') {
//Toggle load on startup option + read filename to start, remain reset option
bestand=fopen(file,"wt");
if (load=='0') {
load='1';
} else if(load=='1') {
load='0';
}
fprintf(bestand,"%c\n",reset);
fprintf(bestand,"%c\n",load);
if (load=='1') {
printf("\nWhich file must be loaded on startup?\nGive name: ");
scanf("%s",&startfile);
}
fprintf(bestand,"%s\n",startfile);
fclose(bestand);
}
} while (inp!='0');
printf("\n");
}