我正在尝试将数组转换为列表。 以下是代码:
main
这就是我在tab2list(n, &tete);
函数中调用它的方式:
{{1}}
答案 0 :(得分:1)
您对数组的定义不正确,应该是:
scanf
请注意,您不需要为自己的目的声明本地数组,但是应该insert_end
检查转换是否正确。
另请注意,list ***
可能不会使用void tab2list(int n, list **T) {
int i, res, value;
for (i = 0; i < n;) {
printf("Entrez l'element %d du tableau\n", i + 1);
res = scanf("%d", &value);
if (res == 1) {
insert_end(value, T);
i++;
} else
if (res == -1) {
printf("fin de fichier inattendue\n");
break;
} else {
scanf("%*s"); /* skip the offending input */
}
}
}
参数。
以下是改进版本:
void tab2list(int n, list **T) {
int i, res, t[n];
for (i = 0; i < n;) {
printf("Entrez l'element %d du tableau\n", i + 1);
res = scanf("%d", &t[i]);
if (res == 1) {
i++;
} else
if (res == -1) {
printf("fin de fichier inattendue\n");
return;
} else {
scanf("%*s"); /* skip the offending input and try again */
}
}
/* perform some extra checks on the array... */
for (i = 0; i < n; i++) {
insert_end(t[i], &T);
}
}
如果您需要在将值插入列表之前对值执行一些额外检查,则可以将代码拆分为2个循环:
#define z 50
struct list {
int val;
struct list *next;
};
typedef struct list list;
void tab2list(int *t, int n, list **T) {
int i;
for (i = 0; i < n; i++) {
insert_end(t[i], T);
}
}
int main(void) {
int n, i;
int t[z];
list *tete = NULL;
printf("Entrez le nb d'element de ton tableau(max 50)\n");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("Entrez l'element %d du tableau\n", i + 1);
scanf("%d", &t[i]);
}
tab2list(t, n, &tete);
afficher_list(tete);
return 0;
}
在您提供有关实际问题的进一步信息后,编辑,这是一个固定版本:
URI
答案 1 :(得分:0)
更改行
int t[z];
到
int t[n];
因为我认为您的程序无法编译,因为未声明变量z
。
另外,我想你想要读取你想要在表中的元素数量,所以为此,你需要创建一个大小的数组来保存数字。所以t[n]
。
正如@chqrlie所说,检查scanf
的失败。
答案 2 :(得分:0)
目前尚不清楚是否定义了变量z
,如果是,那么它是如何定义的。例如,该函数不包含至少n <= z
。
此外,我认为函数insert_end
的第二个参数具有类型list **
。所以它应该被称为
insert_end( t[i], T );
因为变量T
已经有类型list **
。
但无论如何,函数定义并没有多大意义。 我认为数组应作为参数传递给函数。
因此该函数可以采用以下方式
void tab2list( list **T, int a[], int n )
{
int i;
for ( i = 0; i < n; i++ ) insert_end( a[i], T );
}