直观下面应该看似有效,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)
改变这一行:
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
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |