Advertisement
Guest User

Untitled

a guest
Jul 24th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.38 KB | None | 0 0
  1. int (*fptr[])(beg*) = { NULL, D_Add_room, D_Add_pathway, D_Delete_room, D_Find_exit,
  2.                               D_Show, D_Timing, D_File_in, D_File_out, D_Random_Generation };
  3.  
  4. int getInt(int* pn) {
  5.     const char* errmsg = "";
  6.     int n;
  7.     do {
  8.         puts(errmsg);
  9.         errmsg = "Repeat input";
  10.         n = scanf_s("%d", pn);
  11.         if (n < 0)
  12.             return 0;
  13.         scanf_s("%*[^\n]");
  14.         scanf_s("%*c");
  15.     } while (n == 0);
  16.     return 1;
  17. }
  18. char* getStr() {
  19.     char* ptr = (char*)malloc(sizeof(char));
  20.     char buf[81];
  21.     int n, len = 0;
  22.     *ptr = '\0';
  23.     do {
  24.         n = scanf_s("%80[^\n]", buf, 81);
  25.         if (n < 0) {
  26.             free(ptr);
  27.             return NULL;
  28.         }
  29.         else
  30.             if (n) {
  31.                 len += strlen(buf);
  32.                 ptr = (char*)realloc(ptr, len + 1);
  33.                 int k = strcspn(buf, "\0"); // длина слова
  34.                 int l = strlen(ptr) + k + 1;
  35.                 strncat_s(ptr, l, buf, k);
  36.             }
  37.     } while (n > 0);
  38.     scanf_s("%*c");
  39.     return ptr;
  40. }
  41. int dialog(const char* msgs[], int N) {
  42.     const char* errmsg = "";
  43.     int rc;
  44.     int i, n;
  45.     do {
  46.         puts(errmsg);
  47.         errmsg = "You are wrong. Repeate, please!";
  48.         for (i = 0; i < N; ++i)
  49.             puts(msgs[i]);
  50.         puts("Make your choice: --> ");
  51.         n = getInt(&rc);
  52.         if (n == 0)
  53.             rc = 0;
  54.     } while (rc < 0 || rc >= N);
  55.     return rc;
  56. }
  57. int main() {
  58.     beg maze=init();
  59.  
  60.     int rc;
  61.     while (rc = dialog(msgs, NMsgs))
  62.         if (!fptr[rc](&maze))
  63.             break;
  64.  
  65.     if (FileOpenFlag)
  66.         D_File_out(&maze);
  67.  
  68.     deleteall(&maze);
  69.     return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement