我正在彻底学习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++) );
}
答案 0 :(得分:1)
conio.h
用于MS-DOS。你在使用MS-DOS吗?可能不是。请勿包含此标题。{}
循环的末尾添加;
或while
。这是正确的语法。否则,您将收到解析器错误。printf
将返回打印的字符数。 scanf
成功时,该函数返回成功填充的参数列表的项数。此计数可以匹配预期的项目数,或者由于匹配失败,读取错误或文件结束的范围而更少(甚至为零)。&a[0][0]+4
是内存地址。每次运行此程序时,您将获得不同的内存地址。 p=&a[0][0]
将在开头p
启动,以准备在下一个while循环中打印出值。您可以在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;
}