objective-c - 请大家帮我看看为什么这段代码一直是死循环(obejective-c)
黄舟
黄舟 2017-04-21 11:17:44
0
2
461

当输入不满足第一个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;
    }
}
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

모든 응답(2)
伊谢尔伦

scanf의 반환 값을 판단하여 잘못된 입력이 있는지 확인해야 합니다. 잘못된 입력이 있는 경우 먼저 이전에 입력한 내용을 삭제해야 합니다. 예를 들어 다음 코드를 사용하세요.

으아악

물론 scanf은 일반적으로 덜 안전하다고 간주되므로 최소한 fgetssscanf으로 다시 작성해야 합니다.

으아악

PS. (type1 ==(long int) type1) && (type2 ==(long int) type2) 이 문장은 꽤 중복됩니다.

迷茫

이것은 Objective-c 문제가 아닌 C 문제입니다.

scanf가 잘못된 입력을 발견하면 실행에 실패하지만 잘못된 입력은 여전히 ​​버퍼에 남아 있습니다. scanf가 다시 입력을 요청하면 터미널 입력을 기다리지 않고 버퍼를 직접 읽습니다.

Theo가 해결책을 제시했습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿