没有反应的原因有很多种。比如错误输入,类型错误,代码逻辑错误。不同的情况应该分开分析。
例如 scanf("%lf %lf\n",&x,&e);
这样的语句在回车后就没有反应,必须输入\n后才会有反应。
因为非输出控制符必须原样输入。\n在scanf函数当中并不是控制符,这里没当成换行符使用。用scanf 不要加入“\n”非输入控制符,系统在运行时会自动换行。
scanf里的东西除了%带的格式控制以外,在输入时其余的必须照样输入,所以去掉/n应该就可以了
建议:scanf里除了%和它所带的格式控制字符以外不要有别的东西,之间也不要用任何诸如逗号,空格之类的隔开,因为没有隔开的话输入的时候很自由,可以输一个按回车,也可以输入一个之后用逗号,空格,Tab键将输入的东西隔开,输入完之后用回车结束就可以了
while (c!=0)//;去掉这个分号先,不然后面根本执行不了
{
c=n%c;
}
把scanf("%lf %lf\n",&x,&e);的\n去掉
改为scanf("%lf %lf",&x,&e);
另外,sat函数不用那么复杂,可改为:
int sat(int n)
{
if (n%2) return -1;
else return 1;
}
qin函数里面应该是q=q+x吧
逻辑错误。
while(x>=0),输入的x为非负整数时,一直执行循环体内语句s=s+x;k++;陷入死循环。
修改:
#include
int main()
{
int k=0,x=0,s=0;//x赋初始值0
float avg=0;
//scanf("%d",&x);//去掉此句
while(x>=0)
{
scanf("%d",&x);//移动到此处
if(x>=0)//添加此条语句
{//添加大括号
s=s+x;
k++;
}//添加大括号
}
if(k>0)avg=(float)s/k;
printf("成绩之和:%d,平均分:%.2f",s,avg);
return 0;
}//运行示例: