当输入不满足第一个if语句的条件时,不是理想的重新给type1和type2赋值而是死循环。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
//6.5.1
long int type1, type2, flag=0;
printf("请输入要测试的两个整数:");
while (flag==0) {
scanf("%li %li", &type1, &type2);
if( (type1 ==(long int) type1) && (type2 ==(long int) type2) && type2 != 0){
if( type1 % type2 == 0 ){
printf("%li可以被%li整除", type1, type2);
flag=1;
}else{
printf("%li不可以被%li整除", type1, type2);
flag=1;
}
}else{
printf("只能输入整数,并且第二个数不能为0,请重新输入:");
}
}
return 0;
}
}
你需要判斷scanf的回傳值,看是否有非法輸入。如果有非法輸入,先要清空之前輸入的內容,例如用這段程式碼:
當然,一般都認為
scanf
不太安全,因此至少都应该用fgets
以及sscanf
改寫:PS.
(type1 ==(long int) type1) && (type2 ==(long int) type2)
這句相當多餘。這是C的問題而不是Objective-c的問題。
scanf 若遇到非法輸入,會執行失敗,但非法輸入仍留在緩衝區中,等scanf再次要求輸入時,會直接讀取緩衝區而不等待終端輸入。
解決方法,Theo已給出。