直观下面看似有效,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;
}
答案 0 :(得分:6)
更改此行:
nodes[i].val = scanf("%i\n", &nodes[i].val);
到此:
scanf("%i\n", &nodes[i].val);
根据手册页,scanf
返回成功匹配和分配的输入项的数量。因此,您的代码正在读取正确的值,但将scanf
的返回值分配给成员,从而覆盖先前分配的值。