首页 > 解决方案 > 为什么我的代码运行 goto 循环的次数比它应该运行的多两次?

问题描述

这是我必须为我的 C 编程课程做的代码练习,但它不起作用。我试图找出问题所在,但似乎找不到。任何人都可以阐明这个问题吗?这是代码(不要介意韩语):

#include<stdio.h>

int main(void)
{
    int cnt = 0;
    char mun;
    while(1)
    {
    re:
        printf("알파벳 입력 :"); /* basically says "type an alphabet" */
        scanf_s("%c", &mun, sizeof(mun));
        cnt++;

        if (mun != 'Q')
        {
            printf("찾는 알파벳이 아닙니다. 알파벳을 다시 입력하세요.\n"); /* "Not the alphabet we need, type another alphabet" */
            goto re;
        }
        else
        {
            printf("총 %d회 실행하여 알파벳을 찾았습니다.\n", cnt); /* "Found the alphabet after %d tries."*/
            printf("찾은 알파벳은 대소 문자 구별 없이 \'Q\'입니다.\n"); /* "The said alphabet is q, either uppercase or lowercase. "/
        }
    }
    return 0;
}

很难解释,所以这是它应该打印的结果:

알파벳 입력 : 3
찾는 알파벳이 아닙니다. 알파벳을 다시 입력하세요.

알파벳 입력 : k
찾는 알파벳이 아닙니다. 알파벳을 다시 입력하세요.

알파벳 입력 : Q
총 3회 실행하여 알파벳을 찾았습니다.
찾은 알파벳은 대소 문자 구별 없이 'Q'입니다.

但相反,它只是再运行两次 goto 循环,例如:

알파벳 입력 :3
찾는 알파벳이 아닙니다. 알파벳을 다시 입력하세요.
알파벳 입력 :찾는 알파벳이 아닙니다. 알파벳을 다시 입력하세요. /* see here? */
알파벳 입력 :k
찾는 알파벳이 아닙니다. 알파벳을 다시 입력하세요.
알파벳 입력 :찾는 알파벳이 아닙니다. 알파벳을 다시 입력하세요.
알파벳 입력 :Q
총 5회 실행하여 알파벳을 찾았습니다.
찾은 알파벳은 대소 문자 구별 없이 'Q'입니다.
알파벳 입력 :찾는 알파벳이 아닙니다. 알파벳을 다시 입력하세요. /* it also runs the goto loop after the 
알파벳 입력 :

拜托,有人帮帮我!

标签: loopsgoto

解决方案


推荐阅读