数组和输入是否与scanf齐头并进?
以下用c语言编写的代码有什么问题? 我遇到了一个分段错误。这是什么数组和输入是否与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()可以简单地写入
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
参数被视为指针并解释为指针。当在第一个参数之后发送integera[i]
的指针式值以外的参数时,行为未定义。“scanf有任何延迟问题”!!
scanf("%d",&a[i]);