循环重复自己?

Loop repeating itself?

我目前正在尝试自学 C,因为我相信这将很好地过渡到 C++ 和 C#(以及在 类 开始之前抢先一步)。所以我决定在这里写这个循环:

#include <stdio.h>

int main()
{
    bool continueLoop = true;
    char response;
    printf("ARE YOU READY TO RUMBLE?!?!\n Y/N\n");
    response = getchar();
    int counter = 0;

        do
        {
            counter++;
            if (response == 'Y')
            {
                printf("AWESOME!");
                continueLoop == false;
                return 0;
            }
            else if (response == 'N')
            {
                printf("YOU FAIL!");
                continueLoop == false;
                return 0;
            }
           if (continueLoop == true)
            {
                printf("I do not understand your input!\n");
                printf("Please reinput! Y/N\n");
                response = getchar();
            }
            if(counter == 5)
            {
                printf("Exiting!");
                continueLoop == false;
                goto exit;
            }
        }while (continueLoop == true);

    exit:
        return 0;
}

我的问题如下: 为什么当我输入例如'M'作为我的答案时,它会自己循环两次;但是,如果给定适当的条件,则正确终止。

此外,我应该将响应转换为单个长度的数组,然后尝试以某种方式比较它,而不是 getchar(),或者应该像这样通过 printf 语句来完成 printf("ARE YOU READY TO RUMBLE?!? \n %s", response);

如果有帮助,我将使用 C-Lion 作为我的 IDE,因为我拒绝在 vi、emacs 或记事本中编写任何代码。

已编辑代码

int main()
{


    char response;
    printf("ARE YOU READY TO RUMBLE?!?!\n Y/N\n");
    scanf(" %c", &response);

    int counter = 0;


    while (counter < 5)
    {
        counter++;
        if (response == 'Y')
        {
            printf("AWESOME!");

            return 0;
        }
        else if (response == 'N')
        {
            printf("YOU FAIL!");

            return 0;
        }
        else
        {
            printf("I do not understand your input!\n");
            printf("Please reinput! Y/N\n");
            response = getchar();
        }

    }


    return 0;


}

当你输入M时,你并不是真的只输入了M;您正在输入 M 后跟一个换行符。所以当你第一次调用它时 getchar(3) 会 return M ,然后在第二次调用时它会 return \n 。因此循环执行两次。

您可以使用 scanf(" %c", &response) 捕获输入并忽略空格(换行符、制表符、空格等)。注意格式字符串中的前导空格;需要强制 scanf(3) 跳过空白。

此外,前两个 if 中的这些语句也是无用的:

continueLoop == false;

您将 continueLoopfalse 进行比较,然后丢弃结果(如果您没有使用 -Wall 进行编译,您应该这样做,因为这很可能会给您一个警告) .

您可能想要赋值而不是比较:

continueLoop = false;

你的代码有几个错误。

首先,如果您想重复某些内容 N 次,请使用 for 循环,而不是 while。 其次,如果您想提前中断循环,请尝试使用 break,而不是布尔值。 最后,将布尔值更改为 false 然后 return 0; 是多余的,因为您正在退出该函数。

int main() 
{
    char response;
    int i=0;
    for (i=0; i<5; i++)
    {
        printf("ARE YOU READY TO RUMBLE?!?!\n Y/N\n");
        response = getchar();
        if (response == 'Y' || response == 'y')
        {
            printf("AWESOME!");
            break;
        }
        else if (response == 'N' || response == 'n') 
        {
            printf("YOU FAIL!");
            break;
        }
        else
        {
            printf("I do not understand your input!\n");
        }
    }
    return 0;
}

最好使用 scanf("%c",&ch); 而不是 getchar(),因为它会 return '\n' 第二次调用 .否则其他代码看起来不错。

因为,我的一位朋友指出 scanf 的相同行为是相同的。然后你可以使用 getc

c = getc(stdin);