有没有办法避免使用休息;在while循环中,当测试包含scanf()时?

时间:2016-11-22 15:03:18

标签: c loops

在此while循环中:

while (scanf("%lf", &first) == 1)
{
    printf("Enter your second float number (q to exit):\n");
    while (scanf("%lf", &second) == 1)
    {
        printf("The result is %f\n", (first - second) / (first * second));
        break;  
    }
    printf("Enter your first float number (q to exit):\n");
}

我想读取一个输入并将其提供给second,然后我想将此循环退出到外部while循环,这样我就可以输入一个非数字字符(例如{{1}赋予q跳出外循环。

但是我在 C Primer Plus 这本书中遇到了这个问题,而这本书还没有告诉我如何在问题出现之前使用firstbreak;,所以我想知道是否有另一种方法来做同样的事情。提前谢谢。

最初的问题:

  

编写一个请求两个浮点数和打印的程序   他们差异的价值除以他们的产品。有   程序循环通过成对的输入值,直到用户输入   非数字输入。

我想要做的是跳出循环,因为iffirst被赋予非数字字符。

1 个答案:

答案 0 :(得分:0)

while与无条件break一起使用将始终完全执行该代码,因此与if一样好 - 正如@Dmitri已经说过的那样。此外,break只会从最内层的相关块中移出 - 所以在您的情况下,它不会突破外部while块。

但是,大多数break调用(毫无疑问,那些位于块末尾的调用)可以通过在while子句中使用正确的条件轻松替换。

请注意,您的代码目前仍会显示double值(由于%lf)。为了允许通过输入'q'字符进行退出,您必须更改读取输入的方式。例如,一种方法可能是读取字符串,如果不是“q”,则将其翻译为double。