C程序 - 从一系列多米诺骨牌中添加,删除和打印多米诺骨牌

时间:2014-03-04 16:06:47

标签: c

以下是程序规范:

这个任务将是从多米诺阵列中添加和删除多米诺骨牌。你的结构将是一个多米诺骨牌。它将包含3个字段(使用,number1和number2)。 使用的字段将保持Y或N.如果使用的是Y,则number1和number2是多米诺骨牌的两个数字。您的主要功能只会分配数组 多米诺骨牌并阅读采取行动的选项。操作是打印,添加,删除和退出(退出程序)。

您必须至少编写以下四个函数。

int getIndex();
void addDomino(Domino * d, int size);
void removeDomino(Domino * d, int offset);
void print(Domino * d, int size);

getIndex函数将获取要删除的索引。

addDomino函数将找到一个空闲点,然后读取该多米诺骨牌的number1和number2。它还会将多米诺骨牌设置为使用(使用='Y')。

removeDomino函数将删除位置索引处的多米诺骨牌。这可以通过将该索引的used标志设置为'N')来完成;

问题:我没有让removeDomino函数正常工作。它只删除一个元素而不会再次工作。

问题:我没有让addDomino函数写入已删除的domino索引,然后正常继续。我的函数只会添加到数组的末尾。

请帮助。

这是我写的程序:

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    int number1;
    int number2;
    char used;

}domino;

int getIndex();
void addDomino(domino * d, int size);
void removeDomino(domino * d, int offset);
void print(domino * d, int size);

int main()
{
    int size = 0;
    int index = 0;
    int offset = 100;
    int counter = 0;
    int i = 0;

    char * dummy = malloc(sizeof(char));

    printf("Enter the max number of dominoes: ");
    scanf("%d%c", &size, dummy);

    domino * d = malloc(sizeof(domino) * size);
    domino current[size];

    char * input = malloc(sizeof(char));

    (*input) = ' ';

    while((*input) != 'q')
    {
        printf("Enter (p) to print, (a) to add, (r) to remove, and (q) to quit: ");
        scanf("%c%c", input, dummy);

        switch(*input)
        {
            case 'p':

            index = counter;

            printf("Printing Dominoes\n");

            for(index = 0; index < counter; index++)
            {   

                if(current[index].used == 'y')
                {

                    print(&current[index], index);

                }
                else
                {

                }

            }

            break;

            case 'a':


                addDomino(&current[index], index);

                index++;

                counter = index;


            break;

            case 'r':

                getIndex();

                removeDomino(&current[offset], offset);

            break;

            case 'q':

                printf("All done\n");

            break;

            default:

            break;
        }   
    }

    return 0;
}


int getIndex()
{
    int offset = 0;
    char dummy = ' ';

    printf("Enter the index:");
    scanf("%d%c", &offset, &dummy);

    return offset;
}

void addDomino(domino * d, int size)
{
    char * dummy = malloc(sizeof(char));

    printf("Enter number 1\n:");
    scanf("%d%c", &d->number1, dummy);

    printf("Enter number 2\n:");
    scanf("%d%c", &d->number2, dummy);

    d->used = 'y';
}

void removeDomino(domino * d, int offset)
{
    d->used = 'n';
}

void print(domino * d, int index)
{

    printf("Domino %d (%d,%d)\n", index, d->number1, d->number2);
}

1 个答案:

答案 0 :(得分:2)

'r'案例中,您忘记使用GetIndex的返回值。 getIndex中使用的偏移量是该函数的局部偏移量,不会更改主函数中的偏移量变量。 如果您将getIndex();更改为offset = getIndex();,我认为它应该可以正常运行。