在Else-If构造中使用最后一个else语句

时间:2014-02-09 14:30:37

标签: c

在“C编程语言”一书中,它写了else-if构造中的最后一个else语句,可用于错误检查以捕获不可能的条件。

有人能为此提供一个简单的例子吗?

6 个答案:

答案 0 :(得分:2)

也许是这样的:

int manipulteBit(int bit) {
   if(bit == 0) {
      //it's 0
      //...
   } else if(bit == 1) {
      //it's 1
      //...
   } else {
      //error, I expect 0 or 1
   }
}

如果你写了一个带数字的函数并且应该决定它是1还是0,它应该知道如何处理“无效”输入。

答案 1 :(得分:2)

“不可能”在这里意味着“不应该发生”,而不是字面上“不可能发生”,检查后者显然毫无意义。换句话说,您认为您已编写代码,以便变量在给定时间内只能包含值12或{{1}并且你编写了3语句来处理它们,但是然后添加一个最终的if子句来吸引你的注意力,这样如果你错了,你的代码不像你那么严密你想,然后你就能看到,这个虫子不会让你的注意力消失。

例如:

else

答案 2 :(得分:1)

否则将匹配任何if / else if不匹配的条件。因此,保证您的代码将始终输入“if / else ifs”块中的任何一个或其他。如果你查找switch语句,可以将else与“default”进行比较,并将if / else if与case进行比较。

示例:

int age = 18;

if (age < 18)
    printf("You are under 18");
else if (age == 18)
    printf("You are 18 years old");
else
    printf("You are older than 18");

答案 3 :(得分:1)

您可以通过编写两个简单程序来测试它;

#include <stdio.h>
int main(void)
{
    int x;
    scanf("%d", &x);

    if(x == 1)
        printf("ON");
    else if(x == 0)
        printf("OFF");
}  

如果01程序以外的用户输入将终止,而不会显示任何退出状态为0的消息。现在考虑一下程序

#include <stdio.h>
int main(void)
{
    int x;
    scanf("%d", &x);

    if(x == 1)
        printf("ON");
    else if(x == 0)
        printf("OFF");
    else
        printf("Unexpected Input");
}  

在这种情况下,最后else用于捕捉用户可以输入01以外的值并向您显示消息的可能性。

答案 4 :(得分:1)

另一个简单的例子是评分标记(标记应该在0 - 100之间):

if (mark < 50 && mark >=0)
{/* Fail */ }
else if (mark >=50 && mark <60)
{/* E grade */}
else if (mark >=60 && mark <70)
{/* D grade */}
else if (mark >=70 && mark <80)
{/* C grade */}
else if (mark >=80 && mark <90)
{/* B grade */}
else if (mark >=90 && mark <=100)
{/* A grade */}
else
{/* This is the impossible "error" condition that you look for! */}

答案 5 :(得分:1)

作为练习,假设我们希望使用作为字符输入的数字读取整数。这将使用getchar函数完成。有三种情况需要考虑:

  1. 到达文件末尾或发生读取错误,因此我们必须退出读取数字。这意味着getchar将返回EOF

  2. 我们读的字符不是数字。请注意,这可能是换行符\n。除了输出目的之外,没有必要单独检查换行符,因为它不是数字。

  3. 添加其他数字可能会导致溢出。例如,如果214748364存储在一个int中,只能容纳一个数字,最多可以容纳2147483647,而下一个数字会使它成为2147483648,这就是溢出。

  4. 以下是代码:

    #include <stdio.h>
    #include <ctype.h>
    #include <limits.h>
    
    int main(void)
    {
        int n = 0;
        int c;
    
        while ((c = getchar()) != EOF && isdigit(c) &&
               (INT_MAX - (c - '0')) / 10 >= n) {
            n *= 10;
            n += c - '0';
        }
    
        if (c == EOF)
            printf("End of file or an error was encountered");
        else if (c == '\n')
            printf("Newline encountered");
        else if (!isdigit(c))
            printf("Non-digit character %c encountered", c);
        else if ((INT_MAX - (c - '0')) / 10 < n)
            printf("Overflow would be caused by appending %c", c);
        else
            printf("unexpected logic error");
        printf(" after %d\n", n);
        return 0;
    }
    

    请注意上述三种情况中的每种情况如何在if语句中单独处理?此外,特殊输出用于遇到换行的情况。但其他呢?这是一个我们没有抓住的案例。 如果没有其他条件为真,则执行与else条件关联的代码。