请大家帮我看看为什么这段代码一直是死循环(obejective-c)

当输入不满足第一个if语句的条件时,不是理想的重新给type1和type2赋值而是死循环。
#import
intmain(intargc,constchar*argv[])
{
@autoreleasepool{
//6.5.1
longinttype1,type2,flag=0;
printf("请输入要测试的两个整数:");
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("只能输入整数,并且第二个数不能为0,请重新输入:");
}
}
return0;
}
}
肥皂起泡泡
浏览 342回答 2
2回答

心有法竹

你需要判断scanf的返回值,看是否有非法输入。如果有非法输入,先要清空之前输入的内容,比如用这段代码:if(scanf("%li%li",&type1,&type2)!=2){//illegalinputintch;while((ch=getchar())!='\n'&&ch!=EOF){//intendtobeblank}}当然,一般都认为scanf不太安全,因此至少都应该用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)这句相当多余。

至尊宝的传说

这是C的问题而不是Objective-c的问题。scanf如果遇到非法输入,会执行失败,但非法输入依然留在缓冲区中,等scanf再次请求输入时,会直接读取缓冲区而不等待终端输入。解决方法,Theo已给出。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript