三个简单的C程序分析

例1

#include <stdio.h>

main()

{int i;int b;

scanf(“%d”,&i);

getchar();

}

为什么只输入一个数字或字母都会退出?

答:当输入为一个数字时,scanf可以正确读取,getchar()为接收一个’n’字符,所以就退出了

当输入为一个字母时,scanf不能正确读取缓冲区中一个字母而跳过,getchar正常接收缓冲区的字母,同样退出。


例2

#include <stdio.h>

main()

{int i;int b;

scanf(“%d”,&i);

scanf(“%d”,&b);

}

为什么输入一个数字不会退出,输入一个字母会退出?

答:当输入为一个数字时,scanf正常接收缓冲区中的数字,而执行第二个scanf(此时缓冲区中无内容)。所以不会退出

当输入为一个字母时,scanf不能正常接收缓冲区中的数字,则跳过,第二个scanf同样不能接收保留在缓冲区中的数字,跳过,接着程序就退出了.



例3

#include <stdio.h>

main()

{int i;int b;

scanf(“%d”,&i);

getch();

}

为什么输入一个数字或者字母都不会退出?

答:当输入为一个数字时,scanf正常接收缓冲区中的数字,执行完后,缓冲区中无内容;接着执行getch(),所以不会退出。

当输入为一个字母时,scanf执行出错,不会理会缓冲区中的字母,但此时getch()是不会到缓冲区中读取内容的,而是等待键盘输入。输入完毕后退出.

三个看似简简单单的程序。。。。其实不简单。很容易忽略的细节。