因?yàn)槌绦蚨x了4次循環(huán),
創(chuàng)新互聯(lián)長期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為精河企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、做網(wǎng)站,精河網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
當(dāng)你輸入是字母,而不是浮點(diǎn)數(shù)時(shí),socre接收到的數(shù)據(jù)肯定不對(duì),
所以輸出“輸入數(shù)據(jù)錯(cuò)誤”
而輸入的信息還在輸入緩沖區(qū),所以下一次執(zhí)行scanf函數(shù)時(shí),直接從輸入緩沖區(qū)讀取,
所以這樣4次,直接全輸出“輸入數(shù)據(jù)錯(cuò)誤”,
方法是在scanf函數(shù)前,加入 fflush(stdin);清楚緩沖區(qū)即可。
因?yàn)?次的時(shí)間間隔極短,time(NULL)都是一個(gè)值
把srand放jp()外面就行,或者jp()調(diào)用的間隔時(shí)間長一點(diǎn)
#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;
}
這個(gè)是輸入的格式的問題直接輸入如1+2回車,應(yīng)該能得到正確的結(jié)果,因?yàn)榛剀囈彩亲址?,所以?huì)被第二個(gè)scanf捕獲。
在scanf里 \n 很特別的,不是要求輸入一個(gè)回車換行
引用一下別人的說法:
過濾空格、制表符、回車等輸入,也就是說
scanf("%d\n", i);
printf("%d\n", i);
你輸入一個(gè)數(shù)后,它是不會(huì)立即顯示的,要等再接收到一個(gè)非(空格、制表符、回車)的輸入scanf語句才結(jié)束。
但請(qǐng)注意的是,最后輸入的那個(gè)非(空格、制表符、回車)的東西是不會(huì)被這個(gè)scanf讀進(jìn)來的,而是留在輸入流里。
所以3會(huì)被x讀入,也就是說最后的6沒有被讀入
#includestdio.h
#includemath.h
int?main(void)
{?
int?a,b,c;
char?ch;
while(1)//把程序放入while循環(huán)里
{
printf("輸入二次方程系數(shù)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);//清空緩存區(qū)
printf("是否繼續(xù)y/n??");
ch=getchar();//輸入字符來控制是否繼續(xù)
if(ch!='Y'ch!='y')//輸入非Y,結(jié)束程序
break;
}
return?0;
}