结构不起作用,得到垃圾输出

时间:2014-06-11 02:41:56

标签: c struct

直观下面看似有效,1)定义结构; 2)尝试加载值; 3)打印它们。

此代码在第一个代码之后创建一个额外的换行符,但不会打印出用户输入的任何值。

#define NODES 5

typedef struct node
{
    int val;
    struct node* next;
}
node;

int main(void)
{
    node nodes[NODES];

    for (int i = 0; i < NODES; i++)
    {
        printf("Value of node %i: ", i);
        nodes[i].val = scanf("%i\n", &nodes[i].val); 
    }

    for (int i = 0; i < NODES; i++)
    {
        printf("Value of node %i: is %i \n", i, nodes[i].val);
    }

    return 0;
}

1 个答案:

答案 0 :(得分:6)

更改此行:

nodes[i].val = scanf("%i\n", &nodes[i].val); 

到此:

scanf("%i\n", &nodes[i].val); 

根据手册页,scanf返回成功匹配和分配的输入项的数量。因此,您的代码正在读取正确的值,但将scanf的返回值分配给成员,从而覆盖先前分配的值。

参考:http://man7.org/linux/man-pages/man3/scanf.3.html