home *** CD-ROM | disk | FTP | other *** search
/ Languages Around the World / LanguageWorld.iso / language / vietnam / lambai / lambai.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-05-02  |  3.9 KB  |  139 lines

  1. #include <stdlib.h>
  2. #include <stdio.h>;
  3. #include <time.h>;
  4. #include "ctype.h";
  5. #include "tolower.c"
  6. #include "toupper.c"
  7. #include "vntype.c"
  8. #include "wildmatc.c"
  9.  
  10.  
  11. main(argc,argv)
  12. int argc; char *argv[];
  13. {
  14.  FILE *infile; int argno;
  15.  int initial_mode = 1; int find_file = 0;
  16.    if (argc <2 ) { printf("Usage: %s filename \n",argv[0]);exit(1);}
  17.    for (argno = 1; argno < argc; argno++) {
  18.       if (strcmp(argv[argno],"-M")==0) {initial_mode = 0; continue;}
  19.       if (strcmp(argv[argno],"-m")==0) {initial_mode = 0; continue;}
  20.       if (strcmp(argv[argno],"-V")==0) {initial_mode = 1; continue;}
  21.       if (strcmp(argv[argno],"-v")==0) {initial_mode = 1; continue;}
  22.       if (!find_file) find_file = 1;
  23.       if ((infile = fopen(argv[argno], "r")) == NULL)
  24.       { fprintf(stderr, "%s: Can't open '%s' for input.\n",
  25.         argv[0],argv[argno]);
  26.       }
  27.       else
  28.       { sevento8(infile,initial_mode);
  29.         fclose(infile);
  30.       }
  31.   }/*for*/
  32.   if (!find_file) sevento8(stdin,initial_mode);
  33.  
  34. int readln(file,buffer,mat)
  35. FILE *file;
  36. char *buffer;
  37. int mat;
  38. {
  39.   char buffer1[256];
  40.   int i,c;
  41.   buffer1[0] = '\0';
  42.   if (fgets(buffer1,256,file) != NULL)
  43.   {
  44.     if (mat)
  45.       for (i=0;buffer1[i] !='\n';i++)
  46.         buffer1[i] =  buffer1[i] - 1;
  47.     for (i=0;i<= strlen(buffer1);i++)
  48.       if (buffer1[i]!= ' ' && buffer1[i] != '\t') break;
  49.     strcpy(buffer,&buffer1[i]);
  50.     strcpy(buffer1,buffer);
  51.     buffer[0] = '\0';
  52.     sscanf(buffer1,"%[^\n]%*c",buffer);
  53.     return 1;
  54.   }
  55.   else return 0;
  56. }
  57.  
  58. sevento8(file)
  59. FILE *file;
  60.  
  61. {
  62.  int num_answer=1, retry = 0, total_score=0, re_read = 0;
  63.  int print_answer=0;
  64.  int num_question=0,correct = 0;    
  65.  int mat;
  66.  int i,j,k,l;
  67.  char c,ch,buffer[256],oldbuffer[256];
  68.  char answer[10][80];
  69.  time_t t;
  70.  
  71.    c = getc(file);
  72.    if (c==1) mat = 1;
  73.    else {ungetc(c,file); mat = 0;}
  74.    while (1)
  75.    {
  76.     if (re_read) {re_read = 0;strcpy(buffer,oldbuffer);}
  77.     else {if (readln(file,buffer,mat)==0) break;strcpy(oldbuffer,buffer);}
  78.     if (wildmat(buffer,".question"))
  79.     { ++num_question;
  80.       while (readln(file,buffer,mat)){
  81.        if (buffer[0]=='.') {strcpy(oldbuffer,buffer);
  82.                             re_read = 1; break;}
  83.        else printf("%s\n",buffer);
  84.       }
  85.     }
  86.     else if (wildmat(buffer,".answer"))
  87.       {num_answer=0; 
  88.        while (readln(file,buffer,mat))
  89.        {
  90.          if (buffer[0] == '.') {strcpy(oldbuffer,buffer);
  91.                                 re_read =1; break;}
  92.          else 
  93.          {
  94.             if (strcmp(buffer,"") != 0)
  95.             {
  96.              for(i=0;i<=strlen(buffer);i++) if (isupper(buffer[i])){
  97.                 c = tolower(buffer[i]); buffer[i] = c;}
  98.              strcpy(answer[++num_answer],buffer);
  99.             }
  100.          } 
  101.        }
  102.        j = 0;
  103. again:
  104.        buffer[0] = '\0';
  105.        scanf(" %[^\n]%*c",buffer);
  106.        for(i=0;i<=strlen(buffer);i++) if (isupper(buffer[i])){
  107.        c = tolower(buffer[i]); buffer[i] = c;}
  108.        for (k=1; k<= num_answer;k++)
  109.           if (correct = wildmat(buffer,answer[k])) break; 
  110.  
  111.        if (!correct && (++j <= retry)){
  112.               printf("Try again\n"); goto again;}
  113.        if (correct) total_score ++;
  114.        if (print_answer)
  115.        {
  116.          if (correct) printf(">>>>>>> Good ! <<<<<<<\n\n");
  117.          printf("Correct answer is : %s \n",answer[1]);
  118.          for (i=2;i<= num_answer;i++)
  119.          printf("               or : %s \n",answer[i]);
  120.          printf("\n\n\n");
  121.        }
  122.       }/*end if .answer*/
  123.     else if (wildmat(buffer,".retry*")) sscanf(buffer,".retry %d",&retry);
  124.     else if (wildmat(buffer,".print*")) print_answer =1;
  125.  
  126.    } /* while 1 */
  127.    printf("\n\nEND OF TEST\n\n");
  128.    srand((unsigned) time(&t));
  129.    if (mat)
  130.     printf("Your score is :%#02d%#03d%#02d\n\n",rand()%100,total_score,
  131.             rand()%100);
  132.    else
  133.  
  134.     printf("Your score is: %d/%d\n\n",
  135.            total_score,num_question);
  136. }
  137.   
  138.