当输入不满足第一个if语句的条件时,不是理想的重新给type1和type2赋值而是死循环。#importintmain(intargc,constchar*argv[]){@autoreleasepool{//6.5.1longinttype1,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;}}
2 回答
心有法竹
TA贡献1866条经验 获得超5个赞
你需要判断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)这句相当多余。
至尊宝的传说
TA贡献1789条经验 获得超10个赞
这是C的问题而不是Objective-c的问题。scanf如果遇到非法输入,会执行失败,但非法输入依然留在缓冲区中,等scanf再次请求输入时,会直接读取缓冲区而不等待终端输入。解决方法,Theo已给出。
添加回答
举报
0/150
提交
取消