c - 如何为用户添加选项以再次运行操作?
问题描述
我使用 switch case 做了一个简单的计算器,我想在最后添加一个选项,让用户输入 Y/N 以输入新值并再次使用该程序。我尝试使用 do-while 但程序在最后检查条件之前退出。
do
{
switch(menueNo)
{
case 0:
break;
case 1:
result= x+y;
printf("the result is: %d \n",result);
break;
case 2:
result= x-y;
printf("the result is: %d \n",result);
break;
case 3:
result= x*y;
printf("the result is: %d \n",result);
break;
case 4:
if (y==0)
printf("invalid denominatior");
else
result= x/y;
printf("%d",result);
break;
default:
printf("invalid operation please try again.");
}
printf("Do you want to repeat the operation? Y/N: ");
scanf("%c",&ch);
} while(ch=='Y' || ch=='y');
解决方案
您可以使用
do {}
while (((menuNo = getch()) == 'y' || menuNo == 'Y') &&
(menuNo != ' ' || menuNo != '\t' || menuNo != '\0');
由于getch()
返回int
其余代码就可以了,因此您的代码将继续并删除scanf()
;
但是为了得到你必须正常工作的东西,你可以做
if (ch >= '0' && ch <= '9')
menuNo = ch - '0'`
这是因为您没有读取十进制值为char
0
48 的十进制值。
要完成答案并将您指向特定问题,您可以在scanf (" %c", &ch)
@pmg 和他的评论中忽略空格和制表符。
尽管您必须初始化menuNo
beforedo {} while ();
循环,但存在一个大问题,否则它就是 UB。
推荐阅读
- rust - 如何在异步模式下使用 reqwest 库处理 RUST 中的错误?
- javascript - 如何使用 sinon.useFakeTimers 在 javascript 单元测试中设置超时
- javascript - 在启用提交按钮之前检查字段是否具有有效的类并且不为空?
- android - 如何使用多个路径将 TextInputLayout startIcon 设置为 VectorDrawable
- azure-functions - Azure Functions 中是否存在(或即将存在)等效的 ResponseCache?
- c# - Unity:TopDown 视图 - 游戏对象不向 mousepos 旋转
- mysql - 复合索引的正确顺序是什么(mysql)
- java - Spring boot:使用modelmapper将UserDto映射到UserDetails并获取Token
- html - Django 3.0 - 在浏览器中查看 PDF
- reactjs - 获取在 github 上部署应用程序的空白页面