Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序循环重复两次而不是一次_C_Loops - Fatal编程技术网

C程序循环重复两次而不是一次

C程序循环重复两次而不是一次,c,loops,C,Loops,我刚开始编写代码,很抱歉问了这个愚蠢的问题。这是C语言编程。 当用户输入Y时,代码按预期运行。如果用户输入N或任何其他字符,程序会循环,但出于某种原因,它会重复同一行两次。 例如: Input: Y Output: The game will now start! 输入:N 输出:正在等待。。。 你想开始比赛吗 不是有效的响应 你想开始比赛吗 正如你所看到的,这条线是双倍的,我该如何解决这个问题 do{ printf(“你想开始游戏吗?:”; scanf(“%c”和&cGameStart);

我刚开始编写代码,很抱歉问了这个愚蠢的问题。这是C语言编程。 当用户输入
Y
时,代码按预期运行。如果用户输入
N
或任何其他字符,程序会循环,但出于某种原因,它会重复同一行两次。 例如:

Input: Y
Output: The game will now start!
输入:N
输出:正在等待。。。
你想开始比赛吗
不是有效的响应
你想开始比赛吗
正如你所看到的,这条线是双倍的,我该如何解决这个问题

do{
printf(“你想开始游戏吗?:”;
scanf(“%c”和&cGameStart);
如果(cGameStart=='Y')
printf(“\n游戏现在将开始!\n”);
如果(cGameStart='N')
printf(“\n等待…\n\n”);
如果((cGameStart!='Y')&&(cGameStart!='N'))
printf(“%c不是有效的响应\n”,cGameStart);
}而(!(cGameStart='Y');

评论与问题无关

问题在于
scanf
在缓冲区中留下的
\n
字符。吃了它,它就会按预期工作

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char cGameStart;
    do {
        printf("Would you like to start the game? <Y/N>: ");
        scanf("%c", &cGameStart);
        if (cGameStart == 'Y')
            printf("\nThe game will now start!\n");
        if (cGameStart == 'N')
            printf("\nWaiting...\n\n");
        if ((cGameStart != 'Y') && (cGameStart != 'N'))
            printf("%c is not a valid response\n", cGameStart);
        fgetc(stdin);
    } while (!(cGameStart == 'Y'));
    printf("Game started\n");
}
#包括
#包括
内部主(空)
{
char-cGameStart;
做{
printf(“你想开始游戏吗?:”;
scanf(“%c”和&cGameStart);
如果(cGameStart=='Y')
printf(“\n游戏现在将开始!\n”);
如果(cGameStart='N')
printf(“\n等待…\n\n”);
如果((cGameStart!='Y')&&(cGameStart!='N'))
printf(“%c不是有效的响应\n”,cGameStart);
fgetc(stdin);
}而(!(cGameStart='Y');
printf(“游戏开始\n”);
}

评论与问题无关

问题在于
scanf
在缓冲区中留下的
\n
字符。吃了它,它就会按预期工作

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char cGameStart;
    do {
        printf("Would you like to start the game? <Y/N>: ");
        scanf("%c", &cGameStart);
        if (cGameStart == 'Y')
            printf("\nThe game will now start!\n");
        if (cGameStart == 'N')
            printf("\nWaiting...\n\n");
        if ((cGameStart != 'Y') && (cGameStart != 'N'))
            printf("%c is not a valid response\n", cGameStart);
        fgetc(stdin);
    } while (!(cGameStart == 'Y'));
    printf("Game started\n");
}
#包括
#包括
内部主(空)
{
char-cGameStart;
做{
printf(“你想开始游戏吗?:”;
scanf(“%c”和&cGameStart);
如果(cGameStart=='Y')
printf(“\n游戏现在将开始!\n”);
如果(cGameStart='N')
printf(“\n等待…\n\n”);
如果((cGameStart!='Y')&&(cGameStart!='N'))
printf(“%c不是有效的响应\n”,cGameStart);
fgetc(stdin);
}而(!(cGameStart='Y');
printf(“游戏开始\n”);
}

Offtopic,但是:您的缩进有点混乱。我建议您将不同的
if
语句保持在相同的缩进级别,因为目前看起来您只检查
N
if
cGameStart=='Y'
(这不是真的)@BlayerBond我认为它们的工作方式与KittyMiao所期望的一样-基本上是三个独立的检查。但我也赞成总是用卷发braces@lucidbrot,你是对的;为了清晰起见,他应该使用
if{}else if{}和else
结构。标签是误导的。如果你考虑缓冲区中的<>代码> \n>代码> char,代码工作正常。但是,你的缩进有点混乱。我建议您将不同的
if
语句保持在相同的缩进级别,因为目前看起来您只检查
N
if
cGameStart=='Y'
(这不是真的)@BlayerBond我认为它们的工作方式与KittyMiao所期望的一样-基本上是三个独立的检查。但我也赞成总是用卷发braces@lucidbrot,你是对的;为了清晰起见,他应该使用
if{}else if{}和else
结构。如果您考虑缓冲区中的<代码> \n>代码> char,则代码工作正常。