gpt4 book ai didi

c - switch 语句创建无限循环

转载 作者:行者123 更新时间:2023-11-30 15:30:03 25 4
gpt4 key购买 nike

我正在编写一段代码,在代码的一部分中我使用了 C 语言的 switch 语句。如果我按 n 它会正确退出,如果我按 y 它将无限循环默认语句,直到我按 control c。我在这里做错了什么。一直在更改 while 语句,但找不到正确的语句。

int main()
{
char ans;
printf("DO you want to continue?");
scanf("%c", &ans);
do
{
switch(ans)
{
case 'y':
some stuff...
printf("DO you want to continue?");
scanf("%c", &ans);
break;
case'n':
printf("BYE");
break;
default:
printf("error, you must enter y or n");
continue;
}
}
while (ans!='n');
return 0;
}

最佳答案

当您按 Enter 键时,换行符 \n 将添加到输入流中。您的代码不会预料到这一点,因为 switch(ans) 仅处理 yn 或“所有其他内容”(包括换行符) .

要解决此问题,请允许 scanf 通过将格式字符串更改为 "%c" 来忽略前面的任何空格,例如

scanf(" %c", &ans);
// ^ space character inserted here

我认为将 scanf 调用移至循环内部更有意义,如下所示:

int main()
{
char ans;

do
{
printf("DO you want to continue?");
if (scanf(" %c", &ans) != 1)
break;

switch(ans)
{
case 'y':
// some stuff...
break;
case 'n':
printf("BYE");
break;
default:
printf("error, you must enter y or n");
continue;
}
}
while (ans!='n');
}

不要忘记始终检查 scanf() 的结果。它将返回成功扫描的项目数(在您的情况下,您希望它返回 1)。如果它返回 0 或负数,则出现另一个问题。

关于c - switch 语句创建无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25859287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com