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

And*_*ndy 3 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;
}
Run Code Online (Sandbox Code Playgroud)

shr*_*t18 6

改变这一行:

nodes[i].val = scanf("%i\n", &nodes[i].val); 
Run Code Online (Sandbox Code Playgroud)

对此:

scanf("%i\n", &nodes[i].val); 
Run Code Online (Sandbox Code Playgroud)

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

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