无法制作简单的设置文件

时间:2016-12-20 10:48:39

标签: c file

一些背景故事
我是一名工科学生(第一年),我们必须创建一个可以管理学生名单的计划。基本上将学生的信息放在一系列结构(学生姓名,出生日期,成绩)中。必须能够添加学生,删除学生,排序学生,更改信息,添加成绩,保存进度,加载进度并生成标记列表(html / css)。

我的问题
我想为我的项目添加设置。我把一些信息放在一个名为settings.txt的文件中。第一行和第二行是整数,可以是1或0.第三行是一个字符串。创建此文件并从文件中读取工作正常,但我当然希望用户也能够更改其设置。但是,当我运行下面的代码时,我的.exe崩溃了。这可能是因为我做了些蠢事,但我现在已经看了几个小时了,而且我的修复了很多。让事情变得更糟我希望有人可以帮助我,提前谢谢! :) 我尝试用英语添加一些注释,最初printf的输出是荷兰语。如果有任何不清楚的地方,请询问!

代码

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");
}

1 个答案:

答案 0 :(得分:0)

  

但是,当我运行下面的代码时,.exe崩溃了。

您定义char …reset,load,然后使用错误的转换说明符fprintf()将这些字符传递给s

            fprintf(bestand,"%s\n",reset);
            fprintf(bestand,"%s\n",load);

如果编译器未警告这些变量的用法不一致,则应使用更好的编译器;如果这样做,则应注意警告。