函数成功写入文件但内容未显示

时间:2018-02-28 13:43:20

标签: c function file-io

我有两个使用.dat文件的函数。 第一个函数添加问题的结构及其对文件的答案,另一个是查看文件中的问题。

addQues()函数在循环内调用main,询问用户是否想要添加更多问题。问题是当第二次及以后调用addQues()函数时,它成功地将问题写入文件,但是当调用viewQues()函数时,问题不会显示。每次后续调用addques()

后,文件的大小也会增加
/*  the structure is as follows */
typedef struct {
    char question[256];
    char choiceA[32];
    char choiceB[32];
    char choiceC[32];
    char choiceD[32];
    char ans;
    int num;    
}question;

/* function to add questions */
void addQues(){
    FILE *fileptr;
    question catcher, ques;
    int x;


    fileptr = fopen("Questions.dat", "a+");
    if(fileptr != NULL){
        catcher.num = 0;
        while(fread(&catcher, sizeof(question), 1, fileptr)!= 0){}

        printf("There are %d questions. Please type in the Question you would like to add.\n\nQuestion: ", catcher.num);
        fflush(stdin);
        scanf("%[^\n]%*c", &ques.question);

        printf("Add four[4] choices to the question\n");

        printf("\nChoice a.: ");
        fflush(stdin);
        scanf("%[^\n]%*c", &ques.choiceA);

        printf("\nChoice b.: ");
        fflush(stdin);
        scanf("%[^\n]%*c", &ques.choiceB);

        printf("\nChoice c.: ");
        fflush(stdin);
        scanf("%[^\n]%*c", &ques.choiceC);

        printf("\nChoice d.: ");
        fflush(stdin);
        scanf("%[^\n]%*c", &ques.choiceD);

        printf("\nType the letter of the correct answer of this question.\nAnswer: ");
        fflush(stdin);
        scanf("%c", &ques.ans);

        ques.num = catcher.num+1;

        printf("%s", ques.question); /* made this snippet to make sure that white spaces in my input were recorded */
        getch();

        if(fwrite(&ques, sizeof(question), 1,fileptr) == 1){
            printf("File write was successful\n"); /* made this snippet to make sure if writing is successful. and it is successfull everytime */
        }else{
            printf("File write was unsuccessfull");
        }
        getch();
        fclose(fileptr);
    }else{
        printf("File either not found or does not exist.");
    }


}

/* code view the Questions in the file */

void viewQues(){
    FILE *fp;
    question ques;

    fp = fopen("Questions.dat", "r");
    if(fp != NULL){
        while(fread(&ques, sizeof(question), 1, fp) != 0){
            printf("[%d] %s\n", ques.num, ques.question);
            }

        fclose(fp);
    }else{
        printf("File is either not found or does not exist.");
    }

}

我有些困惑,因为它有些流畅,但有时却没有。

这只是我第一个学习C编程的学期,所以我还有很多东西需要学习。 我也是这个网站的新手,如果我违反任何要求的格式,请原谅我。

编辑:
该程序要求用户输入一个问题,4个选项,这是正确答案。

在程序要求输入之前,在addQues函数中

,它已经通知用户文件中有多少问题。

示例是
有0个问题(在添加问题时会更新)。您要添加的问题中的租约类型。

问题://用户类型菲律宾的首都是什么?

输入选择A://用户类型'马尼拉'
输入选择B://用户类型'宿务'
输入选择C://用户输入'Davao'
输入选择C://用户类型'Palawan'

输入正确答案的字母://用户输入'a' <

预期输出为

[1]菲律宾的首都是什么?

在第二次调用之后,它显示的输出仍然只是

[1]菲律宾的首都是什么?

对不起,我不知道如何使示例场景与文本的其他部分不同。

0 个答案:

没有答案