home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 1 / 1500 / riddle.c < prev   
C/C++ Source or Header  |  1990-12-28  |  1KB  |  65 lines

  1. #include <stdio.h>
  2. #define QUEST_FILE "/home/rosemary/year2/nrp1/pub/questions"
  3. #define ANS_FILE "/home/rosemary/year2/nrp1/pub/answers"
  4.  
  5. main(argc,argv)
  6. int argc;
  7. char **argv;
  8. {
  9.     switch(argc) {
  10.         case 1: return(ask(QUEST_FILE, 0));
  11.             break;
  12.         case 2: if (!strcmp(argv[1], "-a")) {
  13.                 fprintf(stderr, "No answer number!\n");
  14.                 return(-1);
  15.             } else return(ask(QUEST_FILE, atoi(argv[1])));
  16.             break;
  17.         default: if (!strcmp(argv[1], "-a")) {
  18.                 return(ask(ANS_FILE, atoi(argv[2])));
  19.                 break;
  20.             } else return(ask(QUEST_FILE, atoi(argv[1])));
  21.     }
  22. }
  23.  
  24. ask(file, q)
  25. char *file;
  26. int q;
  27. {
  28.  
  29.     int count = 0, numquest, num;
  30.     int blob;
  31.     FILE *InFile;
  32.  
  33.     if (!(InFile = fopen(file, "r"))) {
  34.         fprintf(stderr, "Can't open %s\n", file);
  35.         exit(-1);
  36.     }
  37.  
  38.     fscanf(InFile, "%d", &numquest);        /* no. of questions */
  39.  
  40.     if (q == 0) {
  41.         srandom(getpid());
  42.         num = random() % numquest + 1;
  43.     } else
  44.         num = q;
  45.  
  46.     if ((num < 1) || (num > numquest)) {
  47.         fprintf(stderr, "Invalid question number\n");
  48.         exit(-1);
  49.     }
  50.  
  51.     while (count < num) 
  52.         if ((blob = getc(InFile)) == '~') count++ ;
  53.         else if (blob == EOF) {
  54.             fprintf(stderr, "File not in valid format\n");
  55.             exit(-1);
  56.         }
  57.  
  58.     while (((blob = getc(InFile)) != '~') && (blob != EOF))
  59.         printf("%c", blob);
  60.  
  61.     fclose(InFile);
  62.  
  63.     return(num);
  64. }
  65.