您的位置:首页 > 编程语言 > C语言/C++

【C语言】printf函数和scanf函数典型例子

2015-07-05 17:13 411 查看
<span style="font-size:18px;">#include <stdio.h>

void main()
{
int i;
char c;
for(i=0; i<5; ++i)
{
scanf("%d",&c);
printf("%d ",i);
}
printf("\n");
}</span>

表面上,这个程序从标准输入设备读入5个数,在标准输出设备上写5个数:0 1 2 3 4 。

实际上,这个程序并不一定得到上面的结果。例如在某个编译器上,它的输出是:0 0 0 0 0 1 2 3 4 。

问题的关键在于,这里c被声明为char类型,而不是int类型。当程序要求scanf读入一个整数,应该传递给它一个指向整数的指针。而程序中scanf函数得到的却是一个指向字符的指针,scanf函数并不能分辨这种情况,它只是将指向这个字符的指针作为指向整数的指针而接受,并且在指针指向的位置存储一个整数。因为整数所占的存储空间要大于字符所占的存储空间,所以字符附近的内存将被覆盖。

字符c附近的内存中存储的内容是由编译器决定的,本例中它存放的是整数i的低端部分。因此,每次读入一个数值到c时,都会将i的低端部分覆盖为0,而i的高端部分本来就是0,相当于i每次都被重新设置为0,循环将一直进行。当到达文件的结束位置后,scanf函数不再试图读入新的数值到c。这时,i才可以正常地递增,最后终止循环。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: