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

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

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

répondre à tous(2)
伊谢尔伦

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 :

if (scanf("%li %li", &type1, &type2) != 2) { // illegal input
    int ch; 
    while ((ch = getchar()) != '\n' && ch != EOF) {
        // intend to be blank
    }
}

Bien sûr, scanf est généralement considéré comme moins sûr, donc au moins il devrait être réécrit avec fgets et 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
    // ...
}

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal