第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請大家?guī)臀铱纯礊槭裁催@段代碼一直是死循環(huán)(obejective-c)

請大家?guī)臀铱纯礊槭裁催@段代碼一直是死循環(huán)(obejective-c)

肥皂起泡泡 2019-04-07 09:38:36
當輸入不滿足第一個if語句的條件時,不是理想的重新給type1和type2賦值而是死循環(huán)。#importintmain(intargc,constchar*argv[]){@autoreleasepool{//6.5.1longinttype1,type2,flag=0;printf("請輸入要測試的兩個整數(shù):");while(flag==0){scanf("%li%li",&type1,&type2);if((type1==(longint)type1)&&(type2==(longint)type2)&&type2!=0){if(type1%type2==0){printf("%li可以被%li整除",type1,type2);flag=1;}else{printf("%li不可以被%li整除",type1,type2);flag=1;}}else{printf("只能輸入整數(shù),并且第二個數(shù)不能為0,請重新輸入:");}}return0;}}
查看完整描述

2 回答

?
心有法竹

TA貢獻1866條經(jīng)驗 獲得超5個贊

你需要判斷scanf的返回值,看是否有非法輸入。如果有非法輸入,先要清空之前輸入的內(nèi)容,比如用這段代碼:
if(scanf("%li%li",&type1,&type2)!=2){//illegalinput
intch;
while((ch=getchar())!='\n'&&ch!=EOF){
//intendtobeblank
}
}
當然,一般都認為scanf不太安全,因此至少都應(yīng)該用fgets以及sscanf改寫:
charbuffer[256];
if(fgets(buffer,sizeof(buffer),stdin)==NULL){
//errorornomoretoread
//...
}
if(sscanf(buffer,"%li%li",&type1,&type2)!=2){//illegalinput
//printerrormessage
//continue
//...
}
PS.(type1==(longint)type1)&&(type2==(longint)type2)這句相當多余。
                            
查看完整回答
反對 回復 2019-04-07
?
至尊寶的傳說

TA貢獻1789條經(jīng)驗 獲得超10個贊

這是C的問題而不是Objective-c的問題。
scanf如果遇到非法輸入,會執(zhí)行失敗,但非法輸入依然留在緩沖區(qū)中,等scanf再次請求輸入時,會直接讀取緩沖區(qū)而不等待終端輸入。
解決方法,Theo已給出。
                            
查看完整回答
反對 回復 2019-04-07
  • 2 回答
  • 0 關(guān)注
  • 357 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號