以下是程序规范:
这个任务将是从多米诺阵列中添加和删除多米诺骨牌。你的结构将是一个多米诺骨牌。它将包含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(¤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);
}
答案 0 :(得分:2)
在'r'
案例中,您忘记使用GetIndex
的返回值。
getIndex
中使用的偏移量是该函数的局部偏移量,不会更改主函数中的偏移量变量。
如果您将getIndex();
更改为offset = getIndex();
,我认为它应该可以正常运行。