第一个问题主程序在文件set_my中。c你必须写一个程序,接受一个整数值列表作为输入 类型int。从这个值列表中,您必须建立一个组。程序必须接收值列表 然后从用户中创建一个组,最后按成员到达的顺序打印该组的成员。可以假定输入的正态性,但可能存在值 在输入列表中重复不止一次对于这样的值(在输入中出现不止一次),它的第一次出现决定了它在打印输出中的位置。组中的成员数量不受限制,并且必须使用realloc函数。值的数量 在输入中也不受限制。输入可以在多行中,并且每行可以出现无限数量的条目。
输入的结束将由标准库中的函数返回的EOF值来标识,通过该函数执行输入(在键盘输入中,可以通过在新行的开头键入d-ctrl来插入EOF)。输入示例:
13 13 13 45 -9 -9 -9 18 18 18 3 4 55 45 66 13 66
对于此输入,输出将为:
13 45 -9 18 3 4 55 66
输出仅包含输入中出现的唯一值,按其首次出现的顺序排列。h
删除重复值。
你需要写两个函数:
set_get -此函数读取用户的输入并将其存储在一个集合中。
set_print -此函数以所需的顺序和格式打印集合中的元素。
下面是我的代码,我到目前为止做了什么。
setSize setArr;
char* input; /*problem with pointing char pointer type directly*/
int prev, size, inputN, count;
int* set;
bool checkMinus;
checkMinus= true;
prev = DEFULT;/*initialze to DEFULT */
set = NULL; /* initialize set to NULL */
size = 0; /* size of set*/
count = 0;/* number of elements in set*/
inputN; /* transformed from char type to integar type*/
input = malloc(sizeof(char)*2);
input[1] = '\0';
set = (int *) malloc(sizeof(int));
/* prompt user for input */
printf("Enter integers to add to set, one at a time or space between each integers.\n");
printf("End input with Ctrl-D (EOF).\n");
/* loop to read input until EOF is reached */
while (1)
{
*input = getchar();
if (feof(stdin)) {
break;
}
if (input == ' ' && !checkMinus) { /* initializing check back to true conditons*/
checkMinus = true;
}
if (!checkMinus && input == '-'){/* check for correction of minus or pluses */
printf("Please insert valid input requested "
"(not allowed to have plus or twice in the same number minus).\n");
exit(1);
}
if ((*input <'0' || *input > '9') && *input != ' ' && *input != '-' && *input != '\n' && *input != EOF ) {
printf("Please insert valid input requested( phrase plus sign was included ).\n");
exit(1);
}
inputN = atoi(input);/*transforming to integar*/
if (inputN != prev) {
prev = inputN;/* we will assign new value to prev */
set = (int *) realloc(set,SIZE_ENLARGE(size++)); /*resize set*/
if (set == NULL) { /*check if realloc failed*/
printf("Error: could not allocate memory.\n");
exit(1);
}
set[count++] = inputN; /* add input to set */
}
}
调试尝试添加两个更多的条件没有取得任何效果,但在调试过程中,我发现无论如何,条件总是满足的。我有一个完全不同的代码,但我不知道如何修复它,并开始一个新的从begginging,但现在我有一个奇怪的错误,其中一个条件
if ((*input <'0' || *input > '9') && *input != ' ' && *input != '-' && *input != '\n' && *input != EOF )
总是会遇到,我不知道如何修复它,它在while循环中,我真的不知道是什么原因导致了这个问题,也不知道如何修复它,请帮助我,我一直在努力解决这个问题。
我试过调试,发现我无法通过该条件(*input '0'||*input〉'9')&& *input!= ' ' && * 输入!= '-' && *input!= '\n' && *input!= EOF)
1条答案
按热度按时间fykwrbwg1#
您发布了您的作业和一段有问题的代码:
1.你应该指出问题描述中的“无限”是有缺陷的。您受到虚拟内存或至少磁盘大小的限制。集合,根据定义,也是未排序的,所以他们应该叫它别的东西。
1.缺少头文件
1.甚至不在函数中代码片段
setSize
未定义DEFAULT
未定义inputN;
不执行任何操作;应该是初始化的input
应该是一个int
,当用来存储来自getchar()
的数据。1.不知道为什么要动态分配
input()
,而它是一个大小为2的固定数组(实际上你只需要一个int
)。input == ' '
将一个指针与一个整数常量进行比较,这不是你想要的。1.将
realloc()
中的值赋给一个临时变量,否则会在失败时泄漏内存。在下面的代码中,调用者应该处理NULL返回值。1.不要投射
void *
。1.在声明变量时,首选初始化变量。它减少了重复,消除了使用未初始化变量的错误情况。
1.倾向于最小化变量的作用域
1.使用更多的函数来构造代码。例如,如果你不能在这个任务中使用
scanf()
,你现在知道你只需要编写你自己的从stdin
阅读整数的实现。此功能可能会失败。示例会话: