循环重复自己?

时间:2015-07-20 16:35:03

标签: 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;
}

我的问题如下:如果我输入例如&#39; M&#39;作为我的答案,它将循环两次;但是,如果它被给予适当的条件,那么正确终止。

此外,我应该将响应转换为单个数组长度,然后尝试以某种方式对其进行比较,而不是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;


}

3 个答案:

答案 0 :(得分:3)

当您输入M时,您实际上并没有真正输入M;您输入M后跟换行符。因此getchar(3)会在您第一次调用时返回M,然后在第二次调用时返回\n。因此循环执行两次。

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

前两个if中的这些陈述也是无用的:

continueLoop == false;

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

你可能想要分配而不是比较:

continueLoop = false;

答案 1 :(得分:-1)

最好使用scanf("%c",&ch);代替getchar(),因为它会返回&#39; \ n&#39;第二次打电话的时候。否则其他代码看起来很好。

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

c = getc(stdin);

答案 2 :(得分:-2)

您的代码中有几处错误。

首先,如果您想重复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;
}