c - C for循环,如何不断提示用户?
问题描述
我正在学习诸如 for 和 while 循环之类的循环,因此我决定自己进行测试并编写一个程序,您可以在下面看到代码。该程序为用户提供了一系列选项来输入选项,但我遇到的问题是我希望能够在操作完成后不断要求用户“输入命令”。
例如,如果我输入 1,则将执行必要的代码,但整个程序就结束了。如何增强此程序,使其不断要求用户输入新命令,直到用户通过输入 0 强行退出?
#include <stdio.h>
int main()
{
int n;
int credit = 0;
int YN;
printf("Welcome to Cash booking software Version 2.145\n");
printf("--------------------------------------------------------\n");
printf("Use the following options:\n");
printf("0 -- Exit\n");
printf("1 -- Display Credit\n");
printf("2 -- Change Credit\n");
printf("3 -- Remove Credit\n");
printf("\n");
for ( ; ; )
{
printf("Enter a command: ");
scanf("%d", &n);
if (n == 0)
{
return 0;
}
else if (n == 1)
{
printf("Your credit is £%d", credit);
}
else if (n == 2)
{
printf("Enter a new credit value: \n");
scanf("%d", &credit);
printf("Your new credit value is %d", credit);
}
else if (n == 3)
{
printf("Are you sure you want to remove your Credit value? (Y=1/N=2)");
scanf("%d", &YN);
if (YN == 1)
{
credit = 0;
}
else
;
}
return 0;
}
}
解决方案
正如其他用户所解释的那样return 0;
,循环内部是导致问题的原因并将其移出会解决它,但是由于您正在学习循环,我认为这是一个很好的例子来教您一些东西。
通常,当您有一些定义循环执行次数的参数时,您应该只使用 for 循环。您刚刚使用的事实for( ; ; )
是一个巨大的危险信号,这是执行此操作的更好方法。
例如,在 c 中编写无限循环的正确方法是while(1){//code in the loop}
. 所以你可以用这个改变你的for循环,它会正常工作(重新定位return 0;
在正确的位置)。
但是因为在这段代码中你并不真正想要一个无限循环(通常它们是一个坏主意),但你希望循环运行直到按下 0,最好的解决方案是使用一个do{} while();
循环,在do
你内部检查是否为 1 , 2 或 3 被按下并执行它们的功能,然后在while
条件下检查是否已按下 0,只有在这种情况下程序才会退出。
这就是代码的样子:
do{
printf("Enter a command: ");
scanf("%d", &n);
if (n == 1){
printf("Your credit is £%d\n", credit); // \n added
}
else if (n == 2){
printf("Enter a new credit value: \n");
scanf("%d", &credit);
printf("Your new credit value is %d\n", credit); // \n added
}
else if (n == 3){
printf("Are you sure you want to remove your Credit value? (Y=1/N=2):");
scanf("%d", &YN);
if (YN == 1){
credit = 0;
}
}
} while(n != 0);
return 0;
另请注意,我添加\n
了一些printf()
命令以获得更好的可视化效果。
推荐阅读
- javascript - 在javascript中设置src img标签
- javascript - 直接访问文档查询数组中的文档会在 onSnapshot() 块之外返回未定义
- cakephp - 在 URL 中隐藏控制器路径
- php - 更好地了解 laravel 上的 @foreach
- firebase - 如何在离开页面时调用firebase查询
- python - 如何在 GDB 上获取用 python 编写的新函数?
- r - 根据数据表的行数添加数字从 1 到 7 的列
- laravel - Laravel 和 Vue.js 表单验证错误
- python-3.x - 订阅和阅读主题:ActiveMQ & Python
- python - 我想设计一个给定的离散时间信号,采样为 Python,并在图片中查看结果