这是一个类的简单程序,它以分钟为单位提示用户他或她淋浴的时间长度(作为正整数,根据需要重新提示),然后打印同等数量的水瓶(作为整数)。
假设淋浴器每分钟使用1.5加仑水(192盎司),塑料瓶大小为16盎司
我的do-while循环成功地拒绝了负数和0,但是,如果我输入“foo”这样的文本,当提示输入淋浴的长度(以分钟为单位)时,程序将进入无限循环,永远运行该循环并打印“How long is your shower(以分钟为单位)?”
有没有办法改进while条件来避免这种情况?
#include <stdio.h>
int min_to_bottles(int *n);
int main(void)
{
int minutes;
int bottles;
do
{
printf("How long is your shower(in minutes)?:");
scanf("%i", &minutes);
}
while (minutes < 1);
bottles = min_to_bottles(&minutes);
printf("Equivalent of bottles used per shower is: %i\n", bottles);
}
int min_to_bottles(int *n)
{
int bottles;
int oz = 192 * *n;
bottles = oz/16;
return bottles;
}
始终检查scanf()
的返回值:
int result;
do {
printf("How long is your shower(in minutes)?:");
result = scanf("%d", &minutes);
if(result != 1)
break;
} while (minutes < 1);
较短的版本(如果只需要一次扫描):
printf("How long is your shower(in minutes)?:");
while ((scanf("%d", &minutes) == 1) && (minutes < 1))
;
在int min_to_bottles(int*n);
中不需要使用指针作为参数:
#include <stdio.h>
int min_to_bottles(int n)
{
return (192 * n) / 16;
}
int main(void)
{
int minutes = 0;
int bottles = 0;
printf("How long is your shower(in minutes)?: ");
while ((scanf("%d", &minutes) == 1) && (minutes < 1 || minutes > 100))
printf("Enter a number between 1 and 100 : ");
// if(minutes == 0) here means invalid data was entered.
// so a check could be done before continuing.
bottles = min_to_bottles(minutes);
printf("Equivalent of bottles used per shower is: %d\n", bottles);
return 0;
}
进行无止境循环有多种可能性,我会选择以下几种: / / 是否有某种形式可以选择?现代编译器是在中间语句和最后一个语句之间做出了区别,还是意识到这是一个无止境的循环,完全跳过了检查部分? 编辑:正如前面提到的,我忘记了,但这样做的原因是我根本不喜欢它作为一个命令。
本文向大家介绍Objective-C实现无限循环轮播器,包括了Objective-C实现无限循环轮播器的使用技巧和注意事项,需要的朋友参考一下 先看看效果图: 具体实现代码: 1. 控制器 2. 显示内容界面设置 以上就是本文的全部内容,希望对大家的学习有所帮助。
hasNext()的定义是“如果此扫描仪的输入中有另一个标记,则返回true。此方法可能会在等待输入扫描时阻塞。扫描仪不会前进超过任何输入。” 当我把 standardInput.hasNext() 放在 for 循环中时,程序会向无穷大运行。但是如果我把它放在 while-loop 中,它不会运行到无穷大。这两个程序之间的区别在哪里,为什么其中一个有效而另一个无效? for循环: while-l
我有一个带感应帽的覆盆子皮。我制作了一个二进制时钟,我想在Sense hat的显示器上显示并保持更新。然而,我想要的能力,开关时钟与操纵杆中间。一切都很好,除了我的时钟的更新循环阻止任何新的输入一旦启动。 我一直在考虑如何解决这个问题。如何允许脚本/时钟保持运行,并且仍然接受来自操纵杆的新操作。但是一旦while循环开始,我就卡住了。我不知道该用谷歌搜索什么。我已经开始研究async/await,
我正在用我的java书复习数据结构,我需要重新创建一个循环链表。我对这个无限循环的链表有问题,弄不清楚为什么。我可以将值插入到列表中,但是打印和删除这些值似乎会无限循环最初插入的值。我如何更改我的List类以避免无限循环? CircularList.Class 链接类
问题内容: 为什么我在递归方法中遇到无限循环,而没有机会输入任何符号来破坏它? 如果您尝试创建错误(将字符串值输入键,然后尝试向其添加数字),则您将在控制台中获得无限的“错误”文本,而不是在第一次错误后,程序应再次询问该数字和然后才决定要做什么。 问题答案: 如果失败,则抛出异常,但不使用无效数据。从文档中: 当扫描程序抛出时,扫描程序将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过该令牌