当输入不满足第一个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的返回值,看是否有非法输入。如果有非法输入,先要清空之前输入的内容,比如用这段代码:
if (scanf("%li %li", &type1, &type2) != 2) { // illegal input
int ch;
while ((ch = getchar()) != '\n' && ch != EOF) {
// intend to be blank
}
}
当然,一般都认为scanf不太安全,因此至少都应该用fgets以及sscanf改写:
char buffer[256];
if (fgets(buffer, sizeof(buffer), stdin) == NULL) {
// error or no more to read
// ...
}
if (sscanf(buffer, "%li %li", &type1, &type2) != 2) { // illegal input
// print error message
// continue
// ...
}