| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
- #include<stdio.h>
 
 - #include<stdlib.h>
 
 - #define LEN sizeof(struct Test)
 
  
- void getInput(struct Test *test);
 
 - int put_test(int m);
 
 - void testing();
 
 - int total(void);
 
 - void remain();
 
 - void main();
 
  
- struct Test
 
 - {
 
 -         char que[100];
 
 -         char answer1[100];
 
 -         char answer2[100];
 
 -         char answer3[100];
 
 -         char answer4[100];
 
 -         char ture[100];
 
 -         struct Test *next;
 
 - };
 
 - struct Test *head;
 
  
- int put_test(int m)
 
 - {
 
 -         struct Test *test=NULL;
 
 -         FILE *fp;
 
 -         if((fp=fopen("test1.txt","r"))==NULL)
 
 -         {
 
 -                 printf("打开文件失败!\n");
 
 -                 exit(0);
 
 -         }
 
 -         char ch,ture_answer[5];
 
 -         int i,n=0,now,py;
 
 -         do
 
 -         {
 
 -                 py=1;
 
 -                 ch=fgetc(fp);
 
 -                 for(i=0;ch!='\n'&&ch!=-1;i++)
 
 -                 {
 
 -                         py++;
 
 -                         ch=fgetc(fp);
 
 -                 }
 
 -                 n++;
 
 -                 if(n==m)
 
 -                 {
 
 -                         if(test==NULL)
 
 -                         {
 
 -                                 test=(struct Test *)malloc(LEN);
 
 -                                 head=test;
 
 -                                 test->next=NULL;
 
 -                         }
 
 -                         else
 
 -                         {
 
 -                                 test->next=test;
 
 -                                 test=(struct Test *)malloc(LEN);
 
 -                                 test->next=NULL;
 
 -                         }
 
 -                 now=ftell(fp);
 
 -                 fseek(fp,(now-py-1),0);
 
 -                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
 
 -                 fseek(fp,now+1,0);
 
 -                 *test->ture=ture_answer[0];
 
 -                 break;
 
 -                 }
 
 -         }while(!feof(fp));
 
 -         fclose(fp);
 
 -         return 0;
 
 - }
 
  
- void testing()
 
 - {
 
 -         int n,o_n,m,i,yes=0,no=0;
 
 -         char user_answer[2];
 
 -         struct Test *test;
 
 -         printf("请输入您想答题的数目:\n");
 
 -         scanf("%d",&n);
 
 -         o_n=total();
 
 -         if(n>o_n||n<0)
 
 -         {
 
 -                 printf("输入错误!");
 
 -                 testing();
 
 -         }
 
 -         for(i=0;i<n;i++)
 
 -         {
 
 -                 do
 
 -                 {
 
 -                         m=rand();
 
 -                 }while(m<=0&&m>o_n);
 
 -                 put_test(m);
 
 -                 test=head;
 
 -                 printf("第%d题:\n",i+1);
 
 -                 printf("%s\n%s\n%s\n%s\n%s\n请输入您的答案:",*test->que,*test->answer1,*test->answer2,*test->answer3,*test->answer4);
 
 -                 scanf("%s",&user_answer);
 
 -                 if(user_answer[0]==*test->ture)
 
 -                 {
 
 -                         printf("答案正确!");
 
 -                         yes++;
 
 -                 }
 
 -                 else
 
 -                 {
 
 -                         printf("答案错误!\n正确答案是:%s\n",test->ture);
 
 -                         no++;
 
 -                 }
 
 -         }
 
 -                 test=head;
 
 -                 do
 
 -                 {
 
 -                         head=test->next;
 
 -                         free(test);
 
 -                         test=head;
 
 -                 }while(test!=NULL);
 
 -         printf("测试结束!\n您的得分是:%d\n正确率:%.2f%%\n",yes,(float)yes/n*100);
 
 -         remain();
 
 - }
 
  
- int total(void)
 
 - {
 
 -         FILE *fp;
 
 -         if((fp=fopen("test1.txt","r"))==NULL)
 
 -         {
 
 -                 printf("打开文件失败!");
 
 -                 exit(0);
 
 -         }
 
 -         int n=0;
 
 -         char c;
 
 -         c=fgetc(fp);
 
 -         do
 
 -         {        
 
 -                 if(c=='\n')
 
 -                         n++;
 
 -                 c=fgetc(fp);
 
 -         }while(!feof(fp));
 
 -         return n;
 
 - }
 
  
- void getInput(struct Test *test)
 
 - {
 
 -         int i,n;
 
 -         printf("你将输入多少道试题?\n");
 
 -         scanf("%d",&n);
 
 -         FILE *fp;
 
 -         if((fp=fopen("test1.txt","a"))==NULL)
 
 -         {
 
 -                 printf("打开文件错误!\n");
 
 -                 exit(0);
 
 -         }
 
 -         test=(struct Test *)malloc(LEN);
 
 -         for(i=1;i<=n;i++)
 
 -         {
 
 -                 printf("题目:");
 
 -                 scanf("%s",test->que);
 
 -                 printf("A.");
 
 -                 scanf("%s",test->answer1);
 
 -                 printf("B.");
 
 -                 scanf("%s",test->answer2);
 
 -                 printf("C.");
 
 -                 scanf("%s",test->answer3);
 
 -                 printf("D.");
 
 -                 scanf("%s",test->answer4);
 
 -                 printf("正确答案:");
 
 -                 scanf("%s",test->ture);
 
  
-                 fputs(test->que,fp);
 
 -                 fputs(" A.",fp);
 
 -                 fputs(test->answer1,fp);
 
 -                 fputs(" B.",fp);
 
 -                 fputs(test->answer2,fp);
 
 -                 fputs(" C.",fp);
 
 -                 fputs(test->answer3,fp);
 
 -                 fputs(" D.",fp);
 
 -                 fputs(test->answer4,fp);
 
 -                 fputs(" 正确答案:",fp);
 
 -                 fputs(test->ture,fp);
 
 -                 fputc('\n',fp);
 
 -         }
 
 -         fclose(fp);
 
 -         free(test);
 
 -         remain();
 
 - }
 
  
- void remain()
 
 - {
 
 -         int flag;
 
 -         printf("1.返回主菜单\n");
 
 -         printf("2.退出程序\n");
 
 -         printf("请输入你的选择:\n");
 
 -         scanf("%d",&flag);
 
 -         switch(flag)
 
 -         {
 
 -         case 1: main(); break;
 
 -         case 2: exit(0);break;
 
 -         default:printf("输入错误!");
 
 -         }
 
 - }
 
  
- void main()
 
 - {
 
 -         struct Test test;
 
 -         int flag;
 
 -         printf("--------单项选择题标准化考试系统--------\n");
 
 -         printf("1.录入试题\n");
 
 -         printf("2.自主测试\n");
 
 -         printf("3.退出程序\n");
 
 -         printf("请输入你的选择:\n");
 
 -         scanf("%d",&flag);
 
 -         switch(flag)
 
 -         {
 
 -         case 1: getInput(&test); break;
 
 -         case 2: testing(); break;
 
 -         case 3: exit(0); break;
 
 -         default:printf("输入错误!\n");
 
 -         }
 
 - }
 
 
  复制代码 
如果你的编译器什么提示也没有的话,一定要换一个好点的
 - main.c:5:22: warning: ‘struct Test’ declared inside parameter list will not be visible outside of this definition or declaration
 
 -     5 | void getInput(struct Test *test);
 
 -       |                      ^~~~
 
 - main.c: In function ‘put_test’:
 
 - main.c:61:29: warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘char (*)[100]’ [-Wformat=]
 
 -    61 |                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
 
 -       |                            ~^            ~~~~~~~~~~
 
 -       |                             |            |
 
 -       |                             char *       char (*)[100]
 
 - main.c:61:31: warning: format ‘%s’ expects argument of type ‘char *’, but argument 4 has type ‘char (*)[100]’ [-Wformat=]
 
 -    61 |                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
 
 -       |                              ~^                     ~~~~~~~~~~~~~~
 
 -       |                               |                     |
 
 -       |                               char *                char (*)[100]
 
 - main.c:61:33: warning: format ‘%s’ expects argument of type ‘char *’, but argument 5 has type ‘char (*)[100]’ [-Wformat=]
 
 -    61 |                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
 
 -       |                                ~^                                  ~~~~~~~~~~~~~~
 
 -       |                                 |                                  |
 
 -       |                                 char *                             char (*)[100]
 
 - main.c:61:35: warning: format ‘%s’ expects argument of type ‘char *’, but argument 6 has type ‘char (*)[100]’ [-Wformat=]
 
 -    61 |                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
 
 -       |                                  ~^                                               ~~~~~~~~~~~~~~
 
 -       |                                   |                                               |
 
 -       |                                   char *                                          char (*)[100]
 
 - main.c:61:37: warning: format ‘%s’ expects argument of type ‘char *’, but argument 7 has type ‘char (*)[100]’ [-Wformat=]
 
 -    61 |                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
 
 -       |                                    ~^                                                            ~~~~~~~~~~~~~~
 
 -       |                                     |                                                            |
 
 -       |                                     char *                                                       char (*)[100]
 
 - main.c:61:39: warning: format ‘%s’ expects argument of type ‘char *’, but argument 8 has type ‘char (*)[5]’ [-Wformat=]
 
 -    61 |                 fscanf(fp,"%s%s%s%s%s%s",&test->que,&test->answer1,&test->answer2,&test->answer3,&test->answer4,&ture_answer);
 
 -       |                                      ~^                                                                         ~~~~~~~~~~~~
 
 -       |                                       |                                                                         |
 
 -       |                                       char *                                                                    char (*)[5]
 
 - main.c: In function ‘testing’:
 
 - main.c:93:26: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
 
 -    93 |                 printf("%s\n%s\n%s\n%s\n%s\n请输入您的答案:",*test->que,*test->answer1,*test->answer2,*test->answer3,*test->answer4);
 
 -       |                         ~^                                    ~~~~~~~~~~
 
 -       |                          |                                    |
 
 -       |                          char *                               int
 
 -       |                         %d
 
 - main.c:93:30: warning: format ‘%s’ expects argument of type ‘char *’, but argument 3 has type ‘int’ [-Wformat=]
 
 -    93 |                 printf("%s\n%s\n%s\n%s\n%s\n请输入您的答案:",*test->que,*test->answer1,*test->answer2,*test->answer3,*test->answer4);
 
 -       |                             ~^                                           ~~~~~~~~~~~~~~
 
 -       |                              |                                           |
 
 -       |                              char *                                      int
 
 -       |                             %d
 
 - main.c:93:34: warning: format ‘%s’ expects argument of type ‘char *’, but argument 4 has type ‘int’ [-Wformat=]
 
 -    93 |                 printf("%s\n%s\n%s\n%s\n%s\n请输入您的答案:",*test->que,*test->answer1,*test->answer2,*test->answer3,*test->answer4);
 
 -       |                                 ~^                                                      ~~~~~~~~~~~~~~
 
 -       |                                  |                                                      |
 
 -       |                                  char *                                                 int
 
 -       |                                 %d
 
 - main.c:93:38: warning: format ‘%s’ expects argument of type ‘char *’, but argument 5 has type ‘int’ [-Wformat=]
 
 -    93 |                 printf("%s\n%s\n%s\n%s\n%s\n请输入您的答案:",*test->que,*test->answer1,*test->answer2,*test->answer3,*test->answer4);
 
 -       |                                     ~^                                                                 ~~~~~~~~~~~~~~
 
 -       |                                      |                                                                 |
 
 -       |                                      char *                                                            int
 
 -       |                                     %d
 
 - main.c:93:42: warning: format ‘%s’ expects argument of type ‘char *’, but argument 6 has type ‘int’ [-Wformat=]
 
 -    93 |                 printf("%s\n%s\n%s\n%s\n%s\n请输入您的答案:",*test->que,*test->answer1,*test->answer2,*test->answer3,*test->answer4);
 
 -       |                                         ~^                                                                            ~~~~~~~~~~~~~~
 
 -       |                                          |                                                                            |
 
 -       |                                          char *                                                                       int
 
 -       |                                         %d
 
 - main.c:94:25: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[2]’ [-Wformat=]
 
 -    94 |                 scanf("%s",&user_answer);
 
 -       |                        ~^  ~~~~~~~~~~~~
 
 -       |                         |  |
 
 -       |                         |  char (*)[2]
 
 -       |                         char *
 
 - main.c: At top level:
 
 - main.c:137:6: error: conflicting types for ‘getInput’; have ‘void(struct Test *)’
 
 -   137 | void getInput(struct Test *test)
 
 -       |      ^~~~~~~~
 
 - main.c:5:6: note: previous declaration of ‘getInput’ with type ‘void(struct Test *)’
 
 -     5 | void getInput(struct Test *test);
 
 -       |      ^~~~~~~~
 
 - main.c:197:6: warning: return type of ‘main’ is not ‘int’ [-Wmain]
 
 -   197 | void main()
 
 -       |      ^~~~
 
 
  复制代码 
 
 
 |   
 
 
 
 |