为什么我的程序在执行完所有命令后不打印任何内容?

问题描述

enter image description here

问题是解析一系列命令,这些命令指示机械臂如何操作平桌上的积木。最初,表上有 n 个块(从 0 到 n-1 编号),其中块 bi 与块 bi+1 相邻,对于所有 0 ≤ i

用于操作块的机械臂的有效命令是:

• 将 a 移到 b

其中 a 和 b 是块编号,在将堆叠在块 a 和 b 顶部的任何块返回到其初始位置后,将块 a 放到块 b 上。

• 将 a 移到 b 上

将块 a 放到包含块 b 的堆栈顶部,然后将所有堆叠在块 a 顶部的块返回到它们的初始位置。

• 将 a 堆在 b 上

将由块 a 和堆叠在块 a 上方的任何块组成的一堆块移动到块 b 上。在桩发生之前,块 b 顶部的所有块都被移动到它们的初始位置。堆叠在 a 块上方的块在移动时保持其顺序。

• 将 a 堆在 b 上

将包含块 a 的一堆块以及堆叠在块 a 上方的任何块放到包含块 b 的堆栈的顶部。堆叠在 a 块上方的块在移动时保持其原始顺序。

退出

终止块世界中的操作。任何 a = b 或 a 和 b 在同一块堆栈中的命令都是非法命令。所有非法命令都应该被忽略,并且应该对块的配置没有影响。

输入:

输出

我的代码

#include<stdio.h>
#include<string.h>

void back(int arr[]) {

}
int main() {
    int noi = 0;
    printf("please input n:");
    int n;
    scanf(" %d",& n);
    int arr[n][n];
    //this for storing their position
    int i,j;
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            arr[i][j] = -1;
        }
        arr[i][0] = i;
    }
    //empty as -1
    char str1[5],str2[5],cmd[20]; //cmd is the complete line which will be spilt
    int s,d; //source & destination
    char st[2],dt[2]; //char variable of int s and d
    char * tk; //a pointer for strtok
    int quit = 0;

    while (1) {
        s = -1;
        d = -1;
        while (!(s >= 0 && s < n && d >= 0 && d < n)) {
            fflush(stdin);
            fgets(cmd,sizeof(cmd),stdin);
            tk = strtok(cmd," ");
            if (strcmp(tk,"quit") == 0) {
                quit = 1;
                break;
            } else {
                strcpy(str1,tk);
                tk = strtok(NULL," ");
                strcpy(st,tk);
                s = atoi(st);
                tk = strtok(NULL," ");
                strcpy(str2," ");
                strcpy(dt,tk);
                d = atoi(dt);
            }
        }
        if (quit == 1) {
            break;
        }
        //finally doing the commands
        if (strcmp(str1,"move") == 0) {
            if (strcmp(str2,"onto") == 0) {
                //empty s
                for (i = 0; i < n && arr[s][i] != -1; i++) {
                    arr[arr[s][i]][0] = arr[s][i];
                    arr[s][i] = -1;
                }
                //empty d
                for (i = 0; i < n && arr[d][i] != -1; i++) {
                    arr[arr[d][i]][0] = arr[d][i];
                    arr[d][i] = -1;
                }
                //Now move s to d
                i = 1;
                arr[d][i] = arr[s][0];
                arr[s][0] = -1;
            } else if (strcmp(str2,"over") == 0) {

                //empty s
                for (i = 0; i < n && arr[s][i] != -1; i++) {
                    arr[arr[s][i]][0] = arr[s][i];
                    arr[s][i] = -1;
                }
                //move s to d
                i = 1;
                while (arr[d][i] != -1) {
                    i++;
                }
                arr[d][i] = arr[s][0];
                arr[s][0] = -1;
            }
        } else if (strcmp(str1,"pile") == 0) {
            if (strcmp(str2,"onto")) {
                //empty d
                for (i = 0; i < n && arr[d][i] != -1; i++) {
                    arr[arr[d][i]][0] = arr[d][i];
                    arr[d][i] = -1;
                }
                //pile s to d
                //find empty of d
                i = 1;
                while (arr[d][i] != -1) {
                    i++;
                }
                //find end(empty) of s and store in j
                j = 0;
                while (arr[s][j] != -1) {
                    j++;
                }
                //piling
                int tj = 0; //for iterating in s
                while (j - 1 >= 0) {
                    arr[d][i] = arr[s][tj];
                    arr[s][tj] = -1;
                    j--;
                    tj++;
                    i++;
                }
            } else if (strcmp(str2,"over")) {
                //pile s to d
                //find empty of d
                i = 1;
                while (arr[d][i] != -1) {
                    i++;
                }
                //find end(empty) of s and store in j
                j = 0;
                while (arr[s][j] != -1) {
                    j++;
                }
                //piling
                int tj = 0; //for iterating in s
                while (j - 1 >= 0) {
                    arr[d][i] = arr[s][tj];
                    arr[s][tj] = -1;
                    j--;
                    tj++;
                    i++;
                }
            }
        }
    }

    //print results
    for (i = 0; i < n; i++) {
        printf("%d:",i);
        for (j = 0; j < n && arr[i][j] != -1; j++) {
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)