C程序循环重复两次而不是一次
我刚开始编写代码,很抱歉问了这个愚蠢的问题。这是C语言编程。 当用户输入C程序循环重复两次而不是一次,c,loops,C,Loops,我刚开始编写代码,很抱歉问了这个愚蠢的问题。这是C语言编程。 当用户输入Y时,代码按预期运行。如果用户输入N或任何其他字符,程序会循环,但出于某种原因,它会重复同一行两次。 例如: Input: Y Output: The game will now start! 输入:N 输出:正在等待。。。 你想开始比赛吗 不是有效的响应 你想开始比赛吗 正如你所看到的,这条线是双倍的,我该如何解决这个问题 do{ printf(“你想开始游戏吗?:”; scanf(“%c”和&cGameStart);
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
ifcGameStart=='Y'
(这不是真的)@BlayerBond我认为它们的工作方式与KittyMiao所期望的一样-基本上是三个独立的检查。但我也赞成总是用卷发braces@lucidbrot,你是对的;为了清晰起见,他应该使用if{}else if{}和else
结构。标签是误导的。如果你考虑缓冲区中的<>代码> \n>代码> char,代码工作正常。但是,你的缩进有点混乱。我建议您将不同的if
语句保持在相同的缩进级别,因为目前看起来您只检查N
ifcGameStart=='Y'
(这不是真的)@BlayerBond我认为它们的工作方式与KittyMiao所期望的一样-基本上是三个独立的检查。但我也赞成总是用卷发braces@lucidbrot,你是对的;为了清晰起见,他应该使用if{}else if{}和else
结构。如果您考虑缓冲区中的<代码> \n>代码> char,则代码工作正常。