在“C编程语言”一书中,它写了else-if构造中的最后一个else语句,可用于错误检查以捕获不可能的条件。
有人能为此提供一个简单的例子吗?
答案 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)
“不可能”在这里意味着“不应该发生”,而不是字面上“不可能发生”,检查后者显然毫无意义。换句话说,您认为您已编写代码,以便变量在给定时间内只能包含值1
,2
或{{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");
}
如果0
或1
程序以外的用户输入将终止,而不会显示任何退出状态为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
用于捕捉用户可以输入0
或1
以外的值并向您显示消息的可能性。
答案 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
函数完成。有三种情况需要考虑:
到达文件末尾或发生读取错误,因此我们必须退出读取数字。这意味着getchar
将返回EOF
。
我们读的字符不是数字。请注意,这可能是换行符\n
。除了输出目的之外,没有必要单独检查换行符,因为它不是数字。
添加其他数字可能会导致溢出。例如,如果214748364存储在一个int中,只能容纳一个数字,最多可以容纳2147483647,而下一个数字会使它成为2147483648,这就是溢出。
以下是代码:
#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条件关联的代码。