请解释while循环中scanf()的使用

时间:2014-03-18 11:45:14

标签: c

我正在彻底学习C语言。我从另一个网站获得了以下代码,并对此有一些疑问。如果我没有正确使用这个网站,我会提前道歉。我是新来发布的。有人可以解释为什么scanf()在while循环中使用而不是在它之前?

#include <stdio.h>
#include <conio.h>

void main()
{
    int a[2][2],*p;
    p = &a[0][0];

    printf("enter 4 numbers\n");
    while ( p < (&a[0][0]+4) && scanf("%d",p++) );
    printf("the numbers are\n");
    p=&a[0][0];
    while( p < (&a[0][0]+4) && printf("%d",*p++) );
}

2 个答案:

答案 0 :(得分:1)

  1. conio.h用于MS-DOS。你在使用MS-DOS吗?可能不是。请勿包含此标题。
  2. 在每个{}循环的末尾添加;while。这是正确的语法。否则,您将收到解析器错误。
  3. 虽然此代码将在您修复这些问题后打印输入的四个值,但这是一种让您了解循环的复杂方法。 printf将返回打印的字符数。 scanf成功时,该函数返回成功填充的参数列表的项数。此计数可以匹配预期的项目数,或者由于匹配失败,读取错误或文件结束的范围而更少(甚至为零)。
  4. &a[0][0]+4是内存地址。每次运行此程序时,您将获得不同的内存地址。
  5. p=&a[0][0]将在开头p启动,以准备在下一个while循环中打印出值。
  6. 您可以在pointer arithmetic of multi-dimensional arrays here上阅读更多内容。

答案 1 :(得分:0)

整数指针变量p已经初始化。在while循环中,检查此引用以查看该数组是否包含四个数字。

  while ( p < (&a[0][0]+4) && scanf("%d",p++) );

实际代码是

#include <stdio.h>
#include <conio.h>

int main()
{
   int a[2][2],*p;
   p = &a[0][0];

   printf("enter 4 numbers\n");
   while ( p < (&a[0][0]+4) && scanf("%d",p++) );
   printf("the numbers are\n");
   p=&a[0][0];
   while( p < (&a[0][0]+4) && printf("%d",*p++) );
   return 0;
}