执行下列C代码输入"-9,Y"会是什么结果?说明原因。(提示:注意第二个if的break语句)
#include<stdio.h>#include<math.h>#defineg9.8intmain(){floathigh=0;floattime=0;intkey=...
#include<stdio.h>
#include<math.h>
#define g 9.8
int main(){
float high=0;
float time=0;
int key=0;
while(1){
printf("\n\t计算物体由静止自由落体时间(g=9.8):\n");
printf("\t**输入-9退出**\n");
printf("\t请输入高度(单位m):\n ");
scanf("%f",&high);
if(high==-9) {
printf("\t退出程序?(Y/N)\n");
scanf("%d",&key);
if(key==89||key==121){
printf("\t程序退出...\n");
break;
}
}
else if(high<=0) {
printf("\t高度应大于0,请重新输入...\n");
}
else{
time=pow(2*high/g,1);
printf("\t下落时间t=%.5f s\n",time);
}
}
return 0;
} 展开
#include<math.h>
#define g 9.8
int main(){
float high=0;
float time=0;
int key=0;
while(1){
printf("\n\t计算物体由静止自由落体时间(g=9.8):\n");
printf("\t**输入-9退出**\n");
printf("\t请输入高度(单位m):\n ");
scanf("%f",&high);
if(high==-9) {
printf("\t退出程序?(Y/N)\n");
scanf("%d",&key);
if(key==89||key==121){
printf("\t程序退出...\n");
break;
}
}
else if(high<=0) {
printf("\t高度应大于0,请重新输入...\n");
}
else{
time=pow(2*high/g,1);
printf("\t下落时间t=%.5f s\n",time);
}
}
return 0;
} 展开
1个回答
展开全部
输入"-9,Y",程序进入死循环。
原因如下:
scanf("%d",&key);
这句要求读取一个整型数给key,输入时给了一个字符Y,所以scanf跳过不读。
scanf("%f",&high);
这句要求读取一个float型数给high,因为前面scanf跳过字符Y但也没处理,所以Y就一直留在输入流中等待读取,结果这句scanf也跳过Y。所以,内存中high的值始终是-9。
因为两个scanf语句都跳过输入流中的字符Y,所以key=0,high=-9始终不会发生变化,程序进入死循环。
原因如下:
scanf("%d",&key);
这句要求读取一个整型数给key,输入时给了一个字符Y,所以scanf跳过不读。
scanf("%f",&high);
这句要求读取一个float型数给high,因为前面scanf跳过字符Y但也没处理,所以Y就一直留在输入流中等待读取,结果这句scanf也跳过Y。所以,内存中high的值始终是-9。
因为两个scanf语句都跳过输入流中的字符Y,所以key=0,high=-9始终不会发生变化,程序进入死循环。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询