问答详情
源自:4-19 臭名远扬之goto语句

不知道哪里有问题 输不出1

#include <stdio.h>
int main()
{
    int sum = 0;
    int i;
    KKKL:for(i=1; i<=10; i++)
    {
        printf("%d\n", i);
        if(i==3)
        break;//是不是少了一个判断呢?
        goto  KKKL;                     //在这里使用goto语句
    }
    printf("结束for循环了....");  //请选择合适位置添加标识符
    return 0;   
}

提问者:qq_绝不将就_0 2017-01-05 14:37

个回答

  • 慕粉21194905
    2017-01-17 11:35:55
    已采纳

    你这个逻辑关系理错了

    你这个if这么写的话

    if(i==3)
            break;//是不是少了一个判断呢?
            goto  KKKL;

    1:结构上少了大括号,计算机认为的是如果i==3执行break;else否则执行goto KKKL;所以当i=1时,if语句判断为i<3,执行了goto KKKL; 而你goto到for语句又把i的值初始化为1了,所以就死循环了。

    2:goto是强制执行到有标识符的位置的,所以你把goto放在for语句前面是不对的,应该吧goto放在printf(“”结束for循环了“”)的前面,当i==3,输出结束for循环。

  • qq_斌_7
    2017-01-05 15:46:57

    #include <stdio.h>
    int main()
    {
        int sum = 0;
        int i;
        for(i=1; i<=10; i++)
        {
            printf("%d\n", i);
            if(i==3)//是不是少了一个判断呢?
            goto  KKKL;                     //在这里使用goto语句
        }
         KKKL:printf("结束for循环了....");  //请选择合适位置添加标识符
        return 0;    
    }

  • 心很空_天很蓝
    2017-01-05 15:45:25

    这样写的话,会陷入死循环吧,大概意思是这样的:

    for(i=1; i<=10; i++)
        {
            printf("%d\n", i);
            if(i==3)
                break;//是不是少了一个判断呢?
            else

                for(i=1; i<=10; i++)
                {
                    printf("%d\n", i);
                    if(i==3)
                    break;//是不是少了一个判断呢?
                    else

                    for...
        }


        }