【发布时间】: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(¤t[index], index);
}
else
{
}
}
break;
case 'a':
addDomino(¤t[index], index);
index++;
counter = index;
break;
case 'r':
getIndex();
removeDomino(¤t[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