我无法运行此代码将数组转换为列表

时间:2016-02-27 12:19:43

标签: c

我正在尝试将数组转换为列表。 以下是代码:

main

这就是我在tab2list(n, &tete); 函数中调用它的方式:

{{1}}

3 个答案:

答案 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 ); 
}