帮帮忙,读段c程序

来源:百度知道 编辑:UC知道 时间:2024/05/12 19:04:45
#include<stdio.h>
main()
{ int i;
float r,s;char c;
l1: printf("请输入圆半径:");
scanf("%f",&r);
if(r<=0){printf("输入有误请重新输入\n");goto l1;}
else {s=PI*r*r;printf("s=%8.2f\n",s);}
printf("你还想继续吗?(t/f)\n");
getchar();scanf("%c",&c);
if(c=='t'){printf("%c",c);system("pause");}
else {}
}这段程序就是要输入圆半径,然后算圆面积,接着询问用户是不是要继续输入圆半径,继续判断。程序我调试了,可以执行,只是我不知道为什么getchar();scanf("%c",&c);这两条语句要一起使用?为什么只用scanf输入字符不行呢?

语句getchar();的作用就是消除你前面输入半径后的回车。
因为你输入的字符在计算机中是先存入缓存,然后再赋值的。在C中回车也算个字符,自然也会先存入缓存。而scanf()在接收char型数据的时候会把回车等也算作是有效数据赋值给char型的变量。因此,我们在下一个赋值时一般都要进行清空缓存的操作,如在scanf()语句后面紧跟一个getchar()语句。像上面程序中的情况,还可以在scanf()中的%c前面加个空格写成" %c",因为scanf()语句会在有空格的情况下忽略一些空白字符,如空格回车等。

根据《高级语言程序设计》--自学考试用书99版,
7.6章节的最后一句话的意思是
因为前面已经做了一次输入。并且在输入半径后还输入了一个 回车
此时的getchar();就是用来接受那个无用的 回车符号。

我一直都不明白,但是事实就是这样。