数组和scanf输入是否齐头并进?

时间:2013-06-18 15:20:04

标签: c arrays

以下用c语言编写的代码有什么问题? 我遇到了分段错误。它是什么?

int a[2];
for(i=0;i<2;i++)
{
    scanf("%d",a[i]);
    printf("%d",a[i]);
}

为什么不能运行?离开宣言。 scanf有延迟问题吗?

2 个答案:

答案 0 :(得分:2)

此:

scanf("%d",a[i]);

错了。 %d格式说明符需要指针到转换后应存储的值,即它应该是:

scanf("%d", &a[i]);

这是必需的,否则您将a[i]的值传递给scanf(),因此无法更改值。通过传递值的地址,scanf()可以简单地写入提供的内存地址以更改存储在那里的值。使用printf(),您不希望您的值发生变化,因此将它们直接传递给printf()就可以了。

此外,转换(与许多其他形式的I / O一样)可能会失败,因此您应该在依赖转换成功之前检查返回值:

if( scanf("%d", &a[i]) == 1 )
  printf("%d\n", a[i]);

您应该多阅读the manual page for scanf()几次。 :)

答案 1 :(得分:1)

将[i]的地址传递给scanf而不是a [i]的值。

scanf("%d",&a[i]);