【发布时间】:2017-08-19 08:50:26
【问题描述】:
今天在我的 c 课上,我遇到了 scanf() 命令时遇到的麻烦,我们只是在学习指针,我们有一个问题要求我们获取一个数组,并在不使用 [] 的情况下将其反转打印,除了声明 ( int) 数组。当然,这似乎是小菜一碟,但当您不小心写到时却不是:
scanf("%d", arr + i);
你注意到 %d 后面的空格了吗?当然确实花了我一段时间才弄明白,但出于某种原因,这让循环变得疯狂,我希望你们帮助我(和我的老师)弄清楚为什么会发生这种情况。示例:
#include <stdio.h>
#define LEN 10
void arrayInput(int * arr, unsigned int len);
void arrayReverseOutput(int * arr, unsigned int len);
int main(void)
{
int arr[LEN] = { 0 };
arrayInput(arr, LEN);
arrayReverseOutput(arr, LEN);
system("pause");
return 0;
}
void arrayInput(int * arr, unsigned int len)
{
unsigned int i = 0;
printf("Enter 10 numbers: ");
for (i = 0; i < len; i++)
{
//printf("i = %d \n", i); see what happens when you use this line
scanf("%d ", arr + i);
}
}
void arrayReverseOutput(int * arr, unsigned int len)
{
int i = 0;
printf("The numbers in reverse order: ");
for (i = --len; i >= 0; i--)
{
printf("%d ", *(arr + i));
}
}
我真的很想看看那个 scanf 发生了什么……就好像它在第一次运行时需要 2 个输入,但不知何故仍然设法将输入放在数组中的正确位置…… 感谢您抽出宝贵时间阅读本文
【问题讨论】:
-
你和你的老师有没有阅读
scanf的文档?将行为应用于输入?为什么不检查scanf的结果?使用调试器? 具体是什么不清楚? -
%d后面的空格必须匹配。%d之前的空格是不必要的。 -
嗯,不清楚的是 - 代码为什么需要插入另一个输入?它怎么知道它去了数组的哪一部分?因为我的理解是: i = 0:获取第一个和第二个数字 i = 1:获取第三个数字 ... i = 9:获取第 11 个数字,未打印 @Olaf
-
为什么必须匹配 %d 之后的空格?为什么会这样? @WeatherVane
-
因为这就是函数的实现方式。您还没有阅读手册页吗?自您发布问题以来,您将花费 25 分钟以上的时间来吸收这组复杂函数的详细信息,并理解为什么必须始终检查函数的返回值:成功扫描的项目数。