Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组和输入是否与scanf齐头并进?_C_Arrays - Fatal编程技术网

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

数组和输入是否与scanf齐头并进?,c,arrays,C,Arrays,以下用c语言编写的代码有什么问题? 我遇到了一个分段错误。这是什么 int a[2]; for(i=0;i<2;i++) { scanf("%d",a[i]); printf("%d",a[i]); } inta[2]; 对于(i=0;i 错误。%d格式说明符需要一个指针,指向转换后值应存储的位置,即: scanf("%d", &a[i]); 这是必需的,因为否则您将a[i]的值传递给scanf(),使其无法更改值。通过传递值的地址,scanf()可以简单地写入

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

int a[2];
for(i=0;i<2;i++)
{
    scanf("%d",a[i]);
    printf("%d",a[i]);
}
inta[2];
对于(i=0;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]);

您可能应该多读几遍。:

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

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

但是,printf中不需要它。为什么呢?请回答我什么是分段错误?@max我添加了更多关于
printf()
的文本。你可以到别处去。基本上,这意味着您的操作系统检测到您的程序执行了不允许执行的操作(例如,通过将整数
a[i]
解释为指针,尝试写入它不拥有的内存)。请不要在不知道其基本用法的情况下使用库函数,如
scanf
printf
。阅读这里的手册页。这是一个很好的评论,但我也问你一些其他的问题。是的,scanf需要指针,但当它没有指针时会发生什么是我的问题。此外,我遇到了一个分段错误。在这种情况下,这是什么?]清楚地提到这个问题。格式说明符之后给出的
scanf
参数被视为指针并解释为指针。当在第一个参数之后发送integer
a[i]
的指针式值以外的参数时,行为未定义。“scanf有任何延迟问题”!!
scanf("%d",&a[i]);