Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.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_While Loop_Scanf - Fatal编程技术网

C中的是/否循环

C中的是/否循环,c,while-loop,scanf,C,While Loop,Scanf,我只是不明白为什么这个Yes/No循环不起作用。有什么建议吗?给定输入为“Y”。我只想让它运行循环,然后再次请求Y或N。如果是,则打印成功;如果是,则打印再见声明。原因是什么 int main(){ char answer; printf("\nWould you like to play? Enter Y or N: \n", answer); scanf("%c", &answer); printf("\n answer is %c"); wh

我只是不明白为什么这个Yes/No循环不起作用。有什么建议吗?给定输入为“Y”。我只想让它运行循环,然后再次请求Y或N。如果是,则打印成功;如果是,则打印再见声明。原因是什么

int main(){
    char answer;
    printf("\nWould you like to play? Enter Y or N: \n", answer);
    scanf("%c", &answer);
    printf("\n answer is %c");
    while (answer == 'Y'){
        printf("Success!");

        printf("\nDo you want to play again? Y or N: \n");
        scanf("%c", &answer);
    }
    printf("GoodBye!");
    return 0;
}

将第二个
scanf
更改为:

scanf(" %c", &answer);
//     ^

问题是,当您输入Y并按enter键时,新行仍在输入缓冲区中,在
%c
可以使用它之前添加一个空间。

修复了各种问题

#include <stdio.h> 
int main(){
char answer;
printf("\nWould you like to play? Enter Y or N: \n");
scanf(" %c", &answer);
printf("\n answer is %c\n", answer);
while (answer == 'Y'){

printf("Success!");

printf("\nDo you want to play again? Y or N: \n");

scanf(" %c", &answer);
printf("\n answer is %c\n", answer);

}
printf("GoodBye!");
return 0;
}
#包括
int main(){
答案;
printf(“\N您想玩吗?输入Y或N:\N”);
scanf(“%c”和“应答”);
printf(“\n答案是%c\n”,答案);
while(答案='Y'){
printf(“成功!”);
printf(“\N要再次播放吗?是还是:\N”);
scanf(“%c”和“应答”);
printf(“\n答案是%c\n”,答案);
}
printf(“再见!”);
返回0;
}

您可以稍微减少代码中的重复,并通过以下方式检查
scanf()
的结果:

int main(void)
{
    char answer;
    printf("Would you like to play? Enter Y or N: ");
    while (scanf(" %c", &answer) == 1 && answer == 'Y')
    {
        printf("Answer is %c\n", answer);
        printf("Success!\n");
        printf("Do you want to play again? Y or N: ");
    }
    printf("GoodBye!\n");
    return 0;
}
第一个
printf()
丢失了未使用的参数
answer
;第二个
printf()
收集了必要的第二个参数
answer
。除了提示之外,通常最好使用换行符结束打印操作(而不是在开始时使用换行符)。在读取
stdin
中的输入之前,C库通常会刷新提示,因此在这些提示的末尾不需要换行符

由于
printf()
返回它打印的字符数,因此您也可以在以下条件下使用它:

int main(void)
{
    char answer;
    printf("Would you like to play? Enter Y or N: ");
    while (scanf(" %c", &answer) == 1 &&
           printf("Answer is %c\n", answer) > 0 &&
           answer == 'Y')
    {
        printf("Success!\n");
        printf("Do you want to play again? Y or N: ");
    }
    printf("GoodBye!\n");
    return 0;
}

这总是与答案相呼应,即使答案不是
Y
并且循环退出。

运行它时会发生什么?你知道当它问你必须键入的问题时:Y它在按键上不工作我会添加“不工作”表示它执行整个程序并打印再见,而不给我回答“Y”或“N”的机会再次执行循环。@Keith,我不知道YY类型,它会做你所期望的事情你是对的!我试图对你的答案投赞成票,但我需要一个15人的代表。哈哈,对不起。谢谢你的帮助!!当我有一个scanf循环时,在
%
之前添加一个空白总是一个好主意吗?@LidongGuo这取决于。在大多数情况下,最好完全避免使用
scanf
,使用
fgets
获取整行内容,使用
sscanf
获取内容。fgets可以获取单个字符吗?@GetKnighted它只能获取整行内容,但是您可以使用
sscanf
获取单个字符。
scanf
的潜在问题是,用户可能无法输入您希望他输入的内容,这可能会导致问题。非常感谢!!你做得很好。我到处寻找这个简单明了的答案,你回答得很完美。在%c之前那该死的额外空间。就像我告诉郝的那样,我试图提高投票率,但还没有得到代表。很抱歉不过反响不错!您现在应该有了代表,并且您应该能够接受答案当我编译时,我应该如何处理“内置函数'printf'的不兼容隐式声明”?程序仍然可以完美运行,但这是一个问题吗?在顶部,添加一行#include,您可能还需要stdlib.h和string.h,然后继续。。。。但基本上,这个警告说我们遇到printf并猜测它是一个使用默认猜测的函数,但是当我们链接它时,我们发现了真正的函数及其不同之处,但是因为我是C,我会让你这么做,并且在大多数情况下,它会起作用,直到它不起作用,然后你会发现一个很难发现的bug,特别是如果你是一个喜欢小费的人!!就像我说的,我是个彻头彻尾的傻瓜。只是想把脚弄湿。永远爱一个伟大的建议!谢谢兄弟!