C语言中,关于 scanf() 函数的返回值
起因
看到有一个问答贴,关于
~
符号的疑问,详情 goto 请教一下,scanf前面的~是什么意思啊?
基础知识
~
取反运算符;- 取反运算符公式:
n=-(n+1)
; - 例如 2 的取反为 -3 ,-1的取反等于0,0的取反等于-1
- 取反运算符公式:
C语言中,
scanf()
函数的返回值;假设返回值为result
result > 0
, 表示正确输入参数的个数, 如题scanf("%d %d", &a, &b)
,输入两个正确的int
数字,则返回 2result = 0
,如果一个输入 整数1,一个输入字母a,这个时候返回 0result = EOF
,通常EOF=-1
,表示输入流已经结束;- 什么情况下会导致
EOF
? - 如
CTRL+D
表示输入结束,或者CTRL+C
,具体可以尝试一下。
- 什么情况下会导致
C语言中,
scanf()
函数的返回值的三种情况,对应的取反值- 输入正确的两个数字,
scanf
返回值=2,取反值=-3 - 输入一个正确的数字,一个错误类型如英文字母,
scanf
返回值=0,取反值=-1 - 执行
Crtl + C
,scanf
返回值=-1,取反值=0
- 输入正确的两个数字,
C语言中,关于
while(condition)
循环condition
当为任意非零值时都为 true,也就是0为false
,其他数都是true
- 当条件为
true
时,执行循环 - 当条件为
false
时,退出循环
示例代码
#include<stdio.h>
int main()
{
int a,b;
int result;
while(1) {
result = scanf("%d%d", &a, &b);
printf("result=%d\n", result);
printf("~result=%d\n", ~result);
if(result == 0) {
printf("Error:params error,not int.\n");
break;
}
if(~result == 0) {
printf("Exit:end of input stream.\n");
break;
}
if(result == 2) {
printf("a+b=%d\n",a+b);
}
}
return 0;
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于上个帖子,我觉得真没必要搞这种操作。万一换到这种平台:
EOF != -1
就要死循环了。
相比之下,
while(scanf(...))
都比while(~scanf(...))
好。。至少
EOF != -1
、原码、反码、补码,都能正常运行。。