【问题标题】:C Program - adding, removing, and printing dominos from an array of dominosC 程序 - 从多米诺骨牌数组中添加、删除和打印多米诺骨牌
【发布时间】:2014-03-04 16:06:46
【问题描述】:

以下是程序规格:

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

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

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

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

addDomino 函数将找到一个空闲位置,然后读取该多米诺骨牌的 number1 和 number2。它还会将该多米诺骨牌设置为正在使用(used = ‘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);
}

【问题讨论】:

  • 此处提供的代码无法编译。例如:maloffset()removeDomion()
  • 谢谢,我注意到了... 复制过来的代码有误。

标签: c


【解决方案1】:

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

【讨论】:

  • 在这个问题上工作了好几个小时......它总是很简单......在你对 removeDomino 问题的帮助下,我能够解决 addDomino 问题......谢谢 Moah
  • @user3379724,你可以考虑accept the answer。谢谢,欢迎使用 StackOverflow!
猜你喜欢
  • 2022-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
  • 2012-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多