negation!my_function()如何在C中影响我的函数?
问题描述:
这是我的read_double函数。为什么我必须检查!flush_buff()或其效果是什么?我以某种方式无法弄清楚。我不能只写flush_buff(),然后返回DBL_MIN?negation!my_function()如何在C中影响我的函数?
double read_double(void) {
double x;
int c, status;
printf("Insert double: ");
status = scanf("%lf", &x);
if (status == EOF || (c = getchar()) == EOF) {
return DBL_MIN;
}
if (status != 1 || c != '\n' || x < DBL_MIN) {
if (!flush_buff()) { /*What is the purpose of this?*/
return DBL_MIN;
}
return DBL_MAX;
}
return x;
}
的flush_buff功能:
int flush_buff(void) {
int c;
while ((c = getchar()) != '\n' && c != EOF) {}
return c != EOF;
}
答
的flush_buff()
函数从stdin提取字符,直到它遇到任一个换行(\n
)或文件(EOF
)的端部。如果发现换行符(而不是EOF
),则返回一个“true”值(等于1)。
语法!flush_buff()
否定此返回值,因此如果flush_buff()
在换行符处停止,则将为false(零),如果已达到文件末尾,则为true(1)。
在您发布的代码中,如果成功读取浮点值,则status
的值将为1,如果无法成功读取浮点值,则值为0,如果输入流在未提供任何输入的情况下结束,则值为EOF
。
如果status
不是EOF
,则从输入读取附加字符c
。如果这不是换行符,或者提供的数字超出了正数非零浮点数的范围,则输入被视为无效。
就这一点而言,程序员决定 - 无论出于何种原因 - 如果输入文件在当前行结束,函数应该返回DBL_MIN
;如果当前行由换行符终止,则该函数应该返回。背后的原因尚不清楚。
答
!
运算符是逻辑NOT运算符。它将操作数解释为布尔值并给出相反的值,其中零为假且非零为真。
在这种情况下,如果读取的最后一个字符是而不是 EOF,则flush_buff
函数返回1(即为真)。因此,如果函数返回false,即如果最后读取的字符是 EOF,则表达式!flush_buf()
的计算结果为真。
BTW'x> DBL_MAX'永远不会成真。 – BLUEPIXY