鱼C论坛

 找回密码
 立即注册
查看: 2018|回复: 11

[已解决]请求大佬们救救孩子!程序今晚就要交了,运行到选择试题之后程序却结束了

[复制链接]
发表于 2021-6-22 21:53:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define LEN sizeof(struct Test)

  4. void getInput(struct Test *test);
  5. int put_test(int m);
  6. void testing();
  7. int total(void);
  8. void remain();
  9. void main();

  10. struct Test
  11. {
  12.         char que[100];
  13.         char answer1[100];
  14.         char answer2[100];
  15.         char answer3[100];
  16.         char answer4[100];
  17.         char ture[100];
  18.         struct Test *next;
  19. };
  20. struct Test *head;

  21. int put_test(int m)
  22. {
  23.         struct Test *test=NULL;
  24.         FILE *fp;
  25.         if((fp=fopen("test1.txt","r"))==NULL)
  26.         {
  27.                 printf("打开文件失败!\n");
  28.                 exit(0);
  29.         }
  30.         char ch,ture_answer[5];
  31.         int i,n=0,now,py;
  32.         do
  33.         {
  34.                 py=1;
  35.                 ch=fgetc(fp);
  36.                 for(i=0;ch!='\n'&&ch!=-1;i++)
  37.                 {
  38.                         py++;
  39.                         ch=fgetc(fp);
  40.                 }
  41.                 n++;
  42.                 if(n==m)
  43.                 {
  44.                         if(test==NULL)
  45.                         {
  46.                                 test=(struct Test *)malloc(LEN);
  47.                                 head=test;
  48.                                 test->next=NULL;
  49.                         }
  50.                         else
  51.                         {
  52.                                 test->next=test;
  53.                                 test=(struct Test *)malloc(LEN);
  54.                                 test->next=NULL;
  55.                         }
  56.                 now=ftell(fp);
  57.                 fseek(fp,(now-py-1),0);
  58.                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
  59.                 fseek(fp,now+1,0);
  60.                 *test->ture=ture_answer[0];
  61.                 break;
  62.                 }
  63.         }while(!feof(fp));
  64.         fclose(fp);
  65.         return 0;
  66. }

  67. void testing()
  68. {
  69.         int n,o_n,m,i,yes=0,no=0;
  70.         char user_answer[2];
  71.         struct Test *test;
  72.         printf("请输入您想答题的数目:\n");
  73.         scanf("%d",&n);
  74.         o_n=total();
  75.         if(n>o_n||n<0)
  76.         {
  77.                 printf("输入错误!");
  78.                 testing();
  79.         }
  80.         for(i=0;i<n;i++)
  81.         {
  82.                 do
  83.                 {
  84.                         m=rand();
  85.                 }while(m<=0&&m>o_n);
  86.                 put_test(m);
  87.                 test=head;
  88.                 printf("第%d题:\n",i+1);
  89.                 printf("%s\n%s\n%s\n%s\n%s\n请输入您的答案:",*test->que,*test->answer1,*test->answer2,*test->answer3,*test->answer4);
  90.                 scanf("%s",&user_answer);
  91.                 if(user_answer[0]==*test->ture)
  92.                 {
  93.                         printf("答案正确!");
  94.                         yes++;
  95.                 }
  96.                 else
  97.                 {
  98.                         printf("答案错误!\n正确答案是:%s\n",test->ture);
  99.                         no++;
  100.                 }
  101.         }
  102.                 test=head;
  103.                 do
  104.                 {
  105.                         head=test->next;
  106.                         free(test);
  107.                         test=head;
  108.                 }while(test!=NULL);
  109.         printf("测试结束!\n您的得分是:%d\n正确率:%.2f%%\n",yes,(float)yes/n*100);
  110.         remain();
  111. }

  112. int total(void)
  113. {
  114.         FILE *fp;
  115.         if((fp=fopen("test1.txt","r"))==NULL)
  116.         {
  117.                 printf("打开文件失败!");
  118.                 exit(0);
  119.         }
  120.         int n=0;
  121.         char c;
  122.         c=fgetc(fp);
  123.         do
  124.         {       
  125.                 if(c=='\n')
  126.                         n++;
  127.                 c=fgetc(fp);
  128.         }while(!feof(fp));
  129.         return n;
  130. }

  131. void getInput(struct Test *test)
  132. {
  133.         int i,n;
  134.         printf("你将输入多少道试题?\n");
  135.         scanf("%d",&n);
  136.         FILE *fp;
  137.         if((fp=fopen("test1.txt","a"))==NULL)
  138.         {
  139.                 printf("打开文件错误!\n");
  140.                 exit(0);
  141.         }
  142.         test=(struct Test *)malloc(LEN);
  143.         for(i=1;i<=n;i++)
  144.         {
  145.                 printf("题目:");
  146.                 scanf("%s",test->que);
  147.                 printf("A.");
  148.                 scanf("%s",test->answer1);
  149.                 printf("B.");
  150.                 scanf("%s",test->answer2);
  151.                 printf("C.");
  152.                 scanf("%s",test->answer3);
  153.                 printf("D.");
  154.                 scanf("%s",test->answer4);
  155.                 printf("正确答案:");
  156.                 scanf("%s",test->ture);

  157.                 fputs(test->que,fp);
  158.                 fputs(" A.",fp);
  159.                 fputs(test->answer1,fp);
  160.                 fputs(" B.",fp);
  161.                 fputs(test->answer2,fp);
  162.                 fputs(" C.",fp);
  163.                 fputs(test->answer3,fp);
  164.                 fputs(" D.",fp);
  165.                 fputs(test->answer4,fp);
  166.                 fputs(" 正确答案:",fp);
  167.                 fputs(test->ture,fp);
  168.                 fputc('\n',fp);
  169.         }
  170.         fclose(fp);
  171.         free(test);
  172.         remain();
  173. }

  174. void remain()
  175. {
  176.         int flag;
  177.         printf("1.返回主菜单\n");
  178.         printf("2.退出程序\n");
  179.         printf("请输入你的选择:\n");
  180.         scanf("%d",&flag);
  181.         switch(flag)
  182.         {
  183.         case 1: main(); break;
  184.         case 2: exit(0);break;
  185.         default:printf("输入错误!");
  186.         }
  187. }

  188. void main()
  189. {
  190.         struct Test test;
  191.         int flag;
  192.         printf("--------单项选择题标准化考试系统--------\n");
  193.         printf("1.录入试题\n");
  194.         printf("2.自主测试\n");
  195.         printf("3.退出程序\n");
  196.         printf("请输入你的选择:\n");
  197.         scanf("%d",&flag);
  198.         switch(flag)
  199.         {
  200.         case 1: getInput(&test); break;
  201.         case 2: testing(); break;
  202.         case 3: exit(0); break;
  203.         default:printf("输入错误!\n");
  204.         }
  205. }
复制代码
最佳答案
2021-6-22 23:38:12
小菜鸡溜溜达 发表于 2021-6-22 23:09
运行以后结果成这样:
--------单项选择题标准化考试系统--------
1.录入试题

如果你的编译器什么提示也没有的话,一定要换一个好点的
  1. main.c:5:22: warning: ‘struct Test’ declared inside parameter list will not be visible outside of this definition or declaration
  2.     5 | void getInput(struct Test *test);
  3.       |                      ^~~~
  4. main.c: In function ‘put_test’:
  5. main.c:61:29: warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘char (*)[100]’ [-Wformat=]
  6.    61 |                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
  7.       |                            ~^            ~~~~~~~~~~
  8.       |                             |            |
  9.       |                             char *       char (*)[100]
  10. main.c:61:31: warning: format ‘%s’ expects argument of type ‘char *’, but argument 4 has type ‘char (*)[100]’ [-Wformat=]
  11.    61 |                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
  12.       |                              ~^                     ~~~~~~~~~~~~~~
  13.       |                               |                     |
  14.       |                               char *                char (*)[100]
  15. main.c:61:33: warning: format ‘%s’ expects argument of type ‘char *’, but argument 5 has type ‘char (*)[100]’ [-Wformat=]
  16.    61 |                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
  17.       |                                ~^                                  ~~~~~~~~~~~~~~
  18.       |                                 |                                  |
  19.       |                                 char *                             char (*)[100]
  20. main.c:61:35: warning: format ‘%s’ expects argument of type ‘char *’, but argument 6 has type ‘char (*)[100]’ [-Wformat=]
  21.    61 |                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
  22.       |                                  ~^                                               ~~~~~~~~~~~~~~
  23.       |                                   |                                               |
  24.       |                                   char *                                          char (*)[100]
  25. main.c:61:37: warning: format ‘%s’ expects argument of type ‘char *’, but argument 7 has type ‘char (*)[100]’ [-Wformat=]
  26.    61 |                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
  27.       |                                    ~^                                                            ~~~~~~~~~~~~~~
  28.       |                                     |                                                            |
  29.       |                                     char *                                                       char (*)[100]
  30. main.c:61:39: warning: format ‘%s’ expects argument of type ‘char *’, but argument 8 has type ‘char (*)[5]’ [-Wformat=]
  31.    61 |                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
  32.       |                                      ~^                                                                         ~~~~~~~~~~~~
  33.       |                                       |                                                                         |
  34.       |                                       char *                                                                    char (*)[5]
  35. main.c: In function ‘testing’:
  36. main.c:93:26: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
  37.    93 |                 printf("%s\n%s\n%s\n%s\n%s\n请输入您的答案:",*test->que,*test->answer1,*test->answer2,*test->answer3,*test->answer4);
  38.       |                         ~^                                    ~~~~~~~~~~
  39.       |                          |                                    |
  40.       |                          char *                               int
  41.       |                         %d
  42. main.c:93:30: warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘int’ [-Wformat=]
  43.    93 |                 printf("%s\n%s\n%s\n%s\n%s\n请输入您的答案:",*test->que,*test->answer1,*test->answer2,*test->answer3,*test->answer4);
  44.       |                             ~^                                           ~~~~~~~~~~~~~~
  45.       |                              |                                           |
  46.       |                              char *                                      int
  47.       |                             %d
  48. main.c:93:34: warning: format ‘%s’ expects argument of type ‘char *’, but argument 4 has type ‘int’ [-Wformat=]
  49.    93 |                 printf("%s\n%s\n%s\n%s\n%s\n请输入您的答案:",*test->que,*test->answer1,*test->answer2,*test->answer3,*test->answer4);
  50.       |                                 ~^                                                      ~~~~~~~~~~~~~~
  51.       |                                  |                                                      |
  52.       |                                  char *                                                 int
  53.       |                                 %d
  54. main.c:93:38: warning: format ‘%s’ expects argument of type ‘char *’, but argument 5 has type ‘int’ [-Wformat=]
  55.    93 |                 printf("%s\n%s\n%s\n%s\n%s\n请输入您的答案:",*test->que,*test->answer1,*test->answer2,*test->answer3,*test->answer4);
  56.       |                                     ~^                                                                 ~~~~~~~~~~~~~~
  57.       |                                      |                                                                 |
  58.       |                                      char *                                                            int
  59.       |                                     %d
  60. main.c:93:42: warning: format ‘%s’ expects argument of type ‘char *’, but argument 6 has type ‘int’ [-Wformat=]
  61.    93 |                 printf("%s\n%s\n%s\n%s\n%s\n请输入您的答案:",*test->que,*test->answer1,*test->answer2,*test->answer3,*test->answer4);
  62.       |                                         ~^                                                                            ~~~~~~~~~~~~~~
  63.       |                                          |                                                                            |
  64.       |                                          char *                                                                       int
  65.       |                                         %d
  66. main.c:94:25: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[2]’ [-Wformat=]
  67.    94 |                 scanf("%s",&user_answer);
  68.       |                        ~^  ~~~~~~~~~~~~
  69.       |                         |  |
  70.       |                         |  char (*)[2]
  71.       |                         char *
  72. main.c: At top level:
  73. main.c:137:6: error: conflicting types for ‘getInput’; have ‘void(struct Test *)’
  74.   137 | void getInput(struct Test *test)
  75.       |      ^~~~~~~~
  76. main.c:5:6: note: previous declaration of ‘getInput’ with type ‘void(struct Test *)’
  77.     5 | void getInput(struct Test *test);
  78.       |      ^~~~~~~~
  79. main.c:197:6: warning: return type of ‘main’ is not ‘int’ [-Wmain]
  80.   197 | void main()
  81.       |      ^~~~
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-6-22 22:25:52 | 显示全部楼层
具体描述一下你这个程序的问题
我需要 这个程序的每一步操作,直到出现问题
首先运行这个程序,然后输入 1 ?
然后输入什么?
反正就是你一直输入,直到发现了明显的问题为止
我要全部的这些输入
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-22 22:42:39 | 显示全部楼层
加油
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-6-22 23:02:52 | 显示全部楼层
加油
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-22 23:06:53 | 显示全部楼层
人造人 发表于 2021-6-22 22:25
具体描述一下你这个程序的问题
我需要 这个程序的每一步操作,直到出现问题
首先运行这个程序,然后输入  ...

输入完1之后开始设置几个题目,输入题目的个数之后输入题目的内容以及选项、正确答案;第二个程序是自主测试,选择自主测试之后输入你想测试题目的题号
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-22 23:07:28 | 显示全部楼层

哈哈哈哈?喵喵喵?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-22 23:09:52 | 显示全部楼层
人造人 发表于 2021-6-22 22:25
具体描述一下你这个程序的问题
我需要 这个程序的每一步操作,直到出现问题
首先运行这个程序,然后输入  ...

运行以后结果成这样:
--------单项选择题标准化考试系统--------
1.录入试题
2.自主测试
3.退出程序
请输入你的选择:
1
你将输入多少道试题?
2
题目:2
A.1
B.1
C.2
D.3
正确答案:C
题目:3
A.1
B.23
C.3
D.4
正确答案:C
1.返回主菜单
2.退出程序
请输入你的选择:
2

--------------------------------
Process exited after 20.65 seconds with return value 0
请按任意键继续. . .
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-22 23:38:12 | 显示全部楼层    本楼为最佳答案   
小菜鸡溜溜达 发表于 2021-6-22 23:09
运行以后结果成这样:
--------单项选择题标准化考试系统--------
1.录入试题

如果你的编译器什么提示也没有的话,一定要换一个好点的
  1. main.c:5:22: warning: ‘struct Test’ declared inside parameter list will not be visible outside of this definition or declaration
  2.     5 | void getInput(struct Test *test);
  3.       |                      ^~~~
  4. main.c: In function ‘put_test’:
  5. main.c:61:29: warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘char (*)[100]’ [-Wformat=]
  6.    61 |                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
  7.       |                            ~^            ~~~~~~~~~~
  8.       |                             |            |
  9.       |                             char *       char (*)[100]
  10. main.c:61:31: warning: format ‘%s’ expects argument of type ‘char *’, but argument 4 has type ‘char (*)[100]’ [-Wformat=]
  11.    61 |                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
  12.       |                              ~^                     ~~~~~~~~~~~~~~
  13.       |                               |                     |
  14.       |                               char *                char (*)[100]
  15. main.c:61:33: warning: format ‘%s’ expects argument of type ‘char *’, but argument 5 has type ‘char (*)[100]’ [-Wformat=]
  16.    61 |                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
  17.       |                                ~^                                  ~~~~~~~~~~~~~~
  18.       |                                 |                                  |
  19.       |                                 char *                             char (*)[100]
  20. main.c:61:35: warning: format ‘%s’ expects argument of type ‘char *’, but argument 6 has type ‘char (*)[100]’ [-Wformat=]
  21.    61 |                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
  22.       |                                  ~^                                               ~~~~~~~~~~~~~~
  23.       |                                   |                                               |
  24.       |                                   char *                                          char (*)[100]
  25. main.c:61:37: warning: format ‘%s’ expects argument of type ‘char *’, but argument 7 has type ‘char (*)[100]’ [-Wformat=]
  26.    61 |                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
  27.       |                                    ~^                                                            ~~~~~~~~~~~~~~
  28.       |                                     |                                                            |
  29.       |                                     char *                                                       char (*)[100]
  30. main.c:61:39: warning: format ‘%s’ expects argument of type ‘char *’, but argument 8 has type ‘char (*)[5]’ [-Wformat=]
  31.    61 |                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
  32.       |                                      ~^                                                                         ~~~~~~~~~~~~
  33.       |                                       |                                                                         |
  34.       |                                       char *                                                                    char (*)[5]
  35. main.c: In function ‘testing’:
  36. main.c:93:26: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
  37.    93 |                 printf("%s\n%s\n%s\n%s\n%s\n请输入您的答案:",*test->que,*test->answer1,*test->answer2,*test->answer3,*test->answer4);
  38.       |                         ~^                                    ~~~~~~~~~~
  39.       |                          |                                    |
  40.       |                          char *                               int
  41.       |                         %d
  42. main.c:93:30: warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘int’ [-Wformat=]
  43.    93 |                 printf("%s\n%s\n%s\n%s\n%s\n请输入您的答案:",*test->que,*test->answer1,*test->answer2,*test->answer3,*test->answer4);
  44.       |                             ~^                                           ~~~~~~~~~~~~~~
  45.       |                              |                                           |
  46.       |                              char *                                      int
  47.       |                             %d
  48. main.c:93:34: warning: format ‘%s’ expects argument of type ‘char *’, but argument 4 has type ‘int’ [-Wformat=]
  49.    93 |                 printf("%s\n%s\n%s\n%s\n%s\n请输入您的答案:",*test->que,*test->answer1,*test->answer2,*test->answer3,*test->answer4);
  50.       |                                 ~^                                                      ~~~~~~~~~~~~~~
  51.       |                                  |                                                      |
  52.       |                                  char *                                                 int
  53.       |                                 %d
  54. main.c:93:38: warning: format ‘%s’ expects argument of type ‘char *’, but argument 5 has type ‘int’ [-Wformat=]
  55.    93 |                 printf("%s\n%s\n%s\n%s\n%s\n请输入您的答案:",*test->que,*test->answer1,*test->answer2,*test->answer3,*test->answer4);
  56.       |                                     ~^                                                                 ~~~~~~~~~~~~~~
  57.       |                                      |                                                                 |
  58.       |                                      char *                                                            int
  59.       |                                     %d
  60. main.c:93:42: warning: format ‘%s’ expects argument of type ‘char *’, but argument 6 has type ‘int’ [-Wformat=]
  61.    93 |                 printf("%s\n%s\n%s\n%s\n%s\n请输入您的答案:",*test->que,*test->answer1,*test->answer2,*test->answer3,*test->answer4);
  62.       |                                         ~^                                                                            ~~~~~~~~~~~~~~
  63.       |                                          |                                                                            |
  64.       |                                          char *                                                                       int
  65.       |                                         %d
  66. main.c:94:25: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[2]’ [-Wformat=]
  67.    94 |                 scanf("%s",&user_answer);
  68.       |                        ~^  ~~~~~~~~~~~~
  69.       |                         |  |
  70.       |                         |  char (*)[2]
  71.       |                         char *
  72. main.c: At top level:
  73. main.c:137:6: error: conflicting types for ‘getInput’; have ‘void(struct Test *)’
  74.   137 | void getInput(struct Test *test)
  75.       |      ^~~~~~~~
  76. main.c:5:6: note: previous declaration of ‘getInput’ with type ‘void(struct Test *)’
  77.     5 | void getInput(struct Test *test);
  78.       |      ^~~~~~~~
  79. main.c:197:6: warning: return type of ‘main’ is not ‘int’ [-Wmain]
  80.   197 | void main()
  81.       |      ^~~~
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-22 23:38:56 | 显示全部楼层
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define LEN sizeof(struct Test)

  4. //void getInput(struct Test *test);
  5. int put_test(int m);
  6. void testing();
  7. int total(void);
  8. void remain();
  9. //void main();
  10. int main(void);

  11. struct Test
  12. {
  13.     char que[100];
  14.     char answer1[100];
  15.     char answer2[100];
  16.     char answer3[100];
  17.     char answer4[100];
  18.     char ture[100];
  19.     struct Test *next;
  20. };
  21. struct Test *head;

  22. void getInput(struct Test *test);

  23. int put_test(int m)
  24. {
  25.     struct Test *test=NULL;
  26.     FILE *fp;
  27.     if((fp=fopen("test1.txt","r"))==NULL)
  28.     {
  29.         printf("打开文件失败!\n");
  30.         exit(0);
  31.     }
  32.     char ch,ture_answer[5];
  33.     int i,n=0,now,py;
  34.     do
  35.     {
  36.         py=1;
  37.         ch=fgetc(fp);
  38.         for(i=0;ch!='\n'&&ch!=-1;i++)
  39.         {
  40.             py++;
  41.             ch=fgetc(fp);
  42.         }
  43.         n++;
  44.         if(n==m)
  45.         {
  46.             if(test==NULL)
  47.             {
  48.                 test=(struct Test *)malloc(LEN);
  49.                 head=test;
  50.                 test->next=NULL;
  51.             }
  52.             else
  53.             {
  54.                 test->next=test;
  55.                 test=(struct Test *)malloc(LEN);
  56.                 test->next=NULL;
  57.             }
  58.             now=ftell(fp);
  59.             fseek(fp,(now-py-1),0);
  60.             //fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
  61.             fscanf(fp,"%s%s%s%s%s%s",test->que,test->answer1,test->answer2,test->answer3,test->answer4,ture_answer);
  62.             fseek(fp,now+1,0);
  63.             *test->ture=ture_answer[0];
  64.             break;
  65.         }
  66.     }while(!feof(fp));
  67.     fclose(fp);
  68.     return 0;
  69. }

  70. void testing()
  71. {
  72.     int n,o_n,m,i,yes=0,no=0;
  73.     char user_answer[2];
  74.     struct Test *test;
  75.     printf("请输入您想答题的数目:\n");
  76.     scanf("%d",&n);
  77.     o_n=total();
  78.     if(n>o_n||n<0)
  79.     {
  80.         printf("输入错误!");
  81.         testing();
  82.     }
  83.     for(i=0;i<n;i++)
  84.     {
  85.         do
  86.         {
  87.             m=rand();
  88.         }while(m<=0&&m>o_n);
  89.         put_test(m);
  90.         test=head;
  91.         printf("第%d题:\n",i+1);
  92.         //printf("%s\n%s\n%s\n%s\n%s\n请输入您的答案:",*test->que,*test->answer1,*test->answer2,*test->answer3,*test->answer4);
  93.         printf("%s\n%s\n%s\n%s\n%s\n请输入您的答案:",test->que,test->answer1,test->answer2,test->answer3,test->answer4);
  94.         //scanf("%s",&user_answer);
  95.         scanf("%s",user_answer);
  96.         if(user_answer[0]==*test->ture)
  97.         {
  98.             printf("答案正确!");
  99.             yes++;
  100.         }
  101.         else
  102.         {
  103.             printf("答案错误!\n正确答案是:%s\n",test->ture);
  104.             no++;
  105.         }
  106.     }
  107.     test=head;
  108.     do
  109.     {
  110.         head=test->next;
  111.         free(test);
  112.         test=head;
  113.     }while(test!=NULL);
  114.     printf("测试结束!\n您的得分是:%d\n正确率:%.2f%%\n",yes,(float)yes/n*100);
  115.     remain();
  116. }

  117. int total(void)
  118. {
  119.     FILE *fp;
  120.     if((fp=fopen("test1.txt","r"))==NULL)
  121.     {
  122.         printf("打开文件失败!");
  123.         exit(0);
  124.     }
  125.     int n=0;
  126.     char c;
  127.     c=fgetc(fp);
  128.     do
  129.     {        
  130.         if(c=='\n')
  131.             n++;
  132.         c=fgetc(fp);
  133.     }while(!feof(fp));
  134.     return n;
  135. }

  136. void getInput(struct Test *test)
  137. {
  138.     int i,n;
  139.     printf("你将输入多少道试题?\n");
  140.     scanf("%d",&n);
  141.     FILE *fp;
  142.     if((fp=fopen("test1.txt","a"))==NULL)
  143.     {
  144.         printf("打开文件错误!\n");
  145.         exit(0);
  146.     }
  147.     test=(struct Test *)malloc(LEN);
  148.     for(i=1;i<=n;i++)
  149.     {
  150.         printf("题目:");
  151.         scanf("%s",test->que);
  152.         printf("A.");
  153.         scanf("%s",test->answer1);
  154.         printf("B.");
  155.         scanf("%s",test->answer2);
  156.         printf("C.");
  157.         scanf("%s",test->answer3);
  158.         printf("D.");
  159.         scanf("%s",test->answer4);
  160.         printf("正确答案:");
  161.         scanf("%s",test->ture);

  162.         fputs(test->que,fp);
  163.         fputs(" A.",fp);
  164.         fputs(test->answer1,fp);
  165.         fputs(" B.",fp);
  166.         fputs(test->answer2,fp);
  167.         fputs(" C.",fp);
  168.         fputs(test->answer3,fp);
  169.         fputs(" D.",fp);
  170.         fputs(test->answer4,fp);
  171.         fputs(" 正确答案:",fp);
  172.         fputs(test->ture,fp);
  173.         fputc('\n',fp);
  174.     }
  175.     fclose(fp);
  176.     free(test);
  177.     remain();
  178. }

  179. void remain()
  180. {
  181.     int flag;
  182.     printf("1.返回主菜单\n");
  183.     printf("2.退出程序\n");
  184.     printf("请输入你的选择:\n");
  185.     scanf("%d",&flag);
  186.     switch(flag)
  187.     {
  188.         case 1: main(); break;
  189.         case 2: exit(0);break;
  190.         default:printf("输入错误!");
  191.     }
  192. }

  193. //void main()
  194. int main(void)
  195. {
  196.     struct Test test;
  197.     int flag;
  198.     printf("--------单项选择题标准化考试系统--------\n");
  199.     printf("1.录入试题\n");
  200.     printf("2.自主测试\n");
  201.     printf("3.退出程序\n");
  202.     printf("请输入你的选择:\n");
  203.     scanf("%d",&flag);
  204.     switch(flag)
  205.     {
  206.         case 1: getInput(&test); break;
  207.         case 2: testing(); break;
  208.         case 3: exit(0); break;
  209.         default:printf("输入错误!\n");
  210.     }
  211.     return 0;
  212. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-23 00:09:20 | 显示全部楼层

太太太感谢了!!!!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-23 10:15:14 | 显示全部楼层

现在人还“健在”吧啊哈哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-23 14:22:34 | 显示全部楼层
Gacy 发表于 2021-6-23 10:15
现在人还“健在”吧啊哈哈哈

还健在啊哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-27 16:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表