当输入不满足第一个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;
}
}
Vous devez juger de la valeur de retour de scanf pour voir s'il y a une entrée illégale. S'il y a une saisie illégale, vous devez d'abord effacer le contenu précédemment saisi, par exemple, utiliser ce code :
Bien sûr,
scanf
est généralement considéré comme moins sûr, donc au moins il devrait être réécrit avecfgets
etsscanf
:PS
(type1 ==(long int) type1) && (type2 ==(long int) type2)
Cette phrase est assez redondante.Il s'agit d'un problème C et non d'un problème Objective-c.
Si scanf rencontre une entrée illégale, son exécution échouera, mais l'entrée illégale restera toujours dans le tampon. Lorsque scanf demandera à nouveau une entrée, il lira directement le tampon sans attendre l'entrée du terminal.
La solution a été donnée par Théo.