我有两个使用.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]菲律宾的首都是什么?
对不起,我不知道如何使示例场景与文本的其他部分不同。