十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
因为程序定义了4次循环,
创新互联长期为1000多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为精河企业提供专业的网站建设、做网站,精河网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。
当你输入是字母,而不是浮点数时,socre接收到的数据肯定不对,
所以输出“输入数据错误”
而输入的信息还在输入缓冲区,所以下一次执行scanf函数时,直接从输入缓冲区读取,
所以这样4次,直接全输出“输入数据错误”,
方法是在scanf函数前,加入 fflush(stdin);清楚缓冲区即可。
因为4次的时间间隔极短,time(NULL)都是一个值
把srand放jp()外面就行,或者jp()调用的间隔时间长一点
#include stdio.h
#include time.h
#include stdlib.h
void jp()
{
int a,b,c;
a=rand()%101+0;
printf("%d\n",a);
}
int main()
{
srand(time(NULL));
for(int i=0;i4;i++)
{
jp();
}
return 0;
}
这个是输入的格式的问题直接输入如1+2回车,应该能得到正确的结果,因为回车也是字符,所以会被第二个scanf捕获。
在scanf里 \n 很特别的,不是要求输入一个回车换行
引用一下别人的说法:
过滤空格、制表符、回车等输入,也就是说
scanf("%d\n", i);
printf("%d\n", i);
你输入一个数后,它是不会立即显示的,要等再接收到一个非(空格、制表符、回车)的输入scanf语句才结束。
但请注意的是,最后输入的那个非(空格、制表符、回车)的东西是不会被这个scanf读进来的,而是留在输入流里。
所以3会被x读入,也就是说最后的6没有被读入
#includestdio.h
#includemath.h
int main(void)
{
int a,b,c;
char ch;
while(1)//把程序放入while循环里
{
printf("输入二次方程系数a,b,c:\n");
scanf("%d %d %d",a,b,c);
double delta;
double x1;
double x2;
double x;
delta=b*b - 4*a*c;
if(a != 0)
{
if(delta 0)
{
x1 = (-b + sqrt(delta)) / (2*a);
x2 = (-b - sqrt(delta)) / (2*a);
printf("x1=%f,x2=%f\n",x1,x2);
}
else if(delta == 0)
{
x2=x1=(-b) / (2*a);
printf("x2=x1=%f\n",x1);
}
else
{
printf("二次方程无解\n");
}
}
else if(b != 0 a == 0)
{
x=(-c)/b;
printf("x=%f\n",x);
}
else
{
printf("方程无解\n");
}
fflush(stdin);//清空缓存区
printf("是否继续y/n? ");
ch=getchar();//输入字符来控制是否继续
if(ch!='Y'ch!='y')//输入非Y,结束程序
break;
}
return 0;
}