c - 循环重复自己?

标签 c clion

我目前正在尝试自学 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) 将在您第一次调用时返回 M ,然后在第二次调用时返回 \n 。因此循环执行了两次。

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

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

continueLoop == false;

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

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

continueLoop = false;

关于c - 循环重复自己?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31521746/

相关文章:

c - 53 :6: warning: conflicting types for function

c - 欧拉项目 - 问题 22 : Answer off by 3. 35%

c++ - CMake 看不到源文件,找不到#includes

c++ - CLion 发现错误的函数签名

c++ - CLion 在哪里存储可执行文件?

C 通过引用删除链表?

c - 如何让 GCC 在编译时评估函数?

c++ - 如何使用 CLion 在 MAC OS X 上发出 EOF 信号

c - 5个嵌套for循环,速度优化

cmake - 如何将 CLion 自定义 CMake 可执行文件设置为随 Homebrew 安装的版本?