#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define TEST struct test
#define SIZE sizeof(struct test)
struct test
{
char main[1000];
char answer[4][80];
int rightanswer;
struct test *next;
};
int menu();//选择菜单
TEST *print(TEST *head,const TEST *p);//将文件中题目输出
TEST *taketest(TEST *test,int size);//随机选择题目
void addtest(TEST *test);//向题库中添加题目
void save(const TEST *head,FILE *fp);//将获取的题目保存到文件
TEST *load(TEST *head,FILE *fp);//读取文件
int myanswer();//用户输入答案
void answer(const TEST *head,int n);//用户答题
main()
{
TEST *head=NULL,temp;
int choice,len=0,c;
FILE *fp=fopen("test.dat","a");
head=load(head,fp);
while((choice=menu())!=3)
if(choice==1)
{
addtest(&temp);
head=print(head,&temp);
++len;
}
else if(choice==2)
{
c=600;
while(c>500 ||c>len)
{
printf("请输入要回答的题的数量:");
scanf("%d",&c);
taketest(head,c);
}
}
save(head,fp);
fclose(fp);
return 0;
}
TEST *taketest(TEST *test,int size)//从文件中随机抽取题目
{
int i;
int seed=1000; // 种子
int m[16];
int nn=1;
double r;
srand(seed); // 初始化随机数生成器
for (i=0;i <size;i++)
m[i]=0;
while(nn <10)// r 是双精度浮点随机数,范围0.0到1.0
{
r=((double)rand()/((double)(RAND_MAX)+(double)(1)));
i=(int)(r*size);
if(m[i]==0)
{
m[i]=1;
nn=nn+1;
}
test->next=test;
answer(test,size);
}
return test;
}
void answer(const TEST *head,int n)
{
int i=0,t=n;
char result[1001],*p=result;
for(i=0;n--;head=head->next)
{
printf("%s\nA.%s\nB.%s\nC.%s\nD.%s\n\n",head->main,head->answer[0],head->answer[1],head->answer[2],head->answer[3]);
if((*p=head->rightanswer)==(*(p+1)=myanswer()))
++i;
p+=2;
}
*p='\0';
printf("\n%-13s%-13s%s\n", "标准答案", "您的答案", "评价");
for(p=result;*p!='\0';p+=2)
printf("%-13c%-13c%s\n",*p,*(p+1),*p==*(p+1)?"正确":"错误");
printf("\n您回答了%d道题, 答对%d道题目,得分:%.2f\n\n",t,i,(float)i/t*100.00);
}
TEST *print(TEST *head,const TEST *p)
{
TEST *p1=(TEST *)malloc(SIZE);
if(p1==NULL)
exit(0);
*p1=*p;
p1->next=head;
return p1;
}
void addtest(TEST *test)
{
int i=0;
printf("输入题干:\n");
scanf("%s",test->main);
while(i <4)
{
printf("请输入选项%c的答案:\n",i+'A');
scanf("%s",test->answer[i++]);
fflush(stdin);
}
test->rightanswer=myanswer();
}
TEST *load(TEST *head,FILE *fp)
{
TEST temp;
while(fread(&temp,SIZE,1,fp))
head=print(head,&temp);
return head;
}
void save(const TEST *head,FILE *fp)
{
fclose(fp);
if((fp=fopen("test.dat","w"))==NULL)
return;
while(head)
{
fwrite(head,SIZE,1,fp);
head=head->next;
}
}
int myanswer()
{
char c='a'; // here
fflush(stdin);
if((c>='A'&&c <='D') ||(c>='a'&&c <='d')) // here
{
printf("请输入A、B、C、D或a、b、c、d:");
scanf("%c",&c);
}
return c;
}
int menu()
{
int value;
printf("1 - 添加选择题\n2 - 回答选择题\n3 - 退出\n");
scanf("%d",&value);
return value;
}
求助为什么我写进去的问题不能保存在文件里?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
悬赏问题
- ¥15 对于相关问题的求解与代码
- ¥15 ubuntu子系统密码忘记
- ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
- ¥15 保护模式-系统加载-段寄存器
- ¥15 电脑桌面设定一个区域禁止鼠标操作
- ¥15 求NPF226060磁芯的详细资料
- ¥15 使用R语言marginaleffects包进行边际效应图绘制
- ¥20 usb设备兼容性问题
- ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
- ¥15 安装svn网络有问题怎么办