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

标签 c arrays

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

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

为什么无法运行?留下有关声明的信息。 scanf有延迟问题吗?

最佳答案

这个:

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

是错误的。 %d 格式说明符需要一个指针,指向转换后值应存储的位置,即它应该是:

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

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

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

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

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

关于c - 数组和 scanf 输入是否齐头并进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17172691/

相关文章:

使用强制转换将负整数转换为正整数

c - 在 Perl XS 中使用 64 位整数

c++ - 在 C++ 中用整数填充固定大小的 char 数组

php - 将关联数组转换为普通数组

javascript - 删除搜索栏中的搜索词时,搜索功能不起作用

c - 我有一个外部 COBOL-IT 函数,我想从我的 C 程序中调用。获取错误 "ERRORC2065: ' productid' : undeclared identifier

c - 如何使用 C 应用程序访问 FreeDOS 中的完整内存空间

C++ 链接器错误 undefined reference to `Suma(int, int)' ld returned 1 exit status

c++ - 识别进程正在某些端口 C/C++ Windows 中运行

java - 将字节数组值以小端顺序转换为短值