C++ c+中scanf函数之前的~(tilde)是什么意思+;?

C++ c+中scanf函数之前的~(tilde)是什么意思+;?,c++,scanf,tilde,C++,Scanf,Tilde,我找到了一个代码,它接受输入字符串并将其打印出来 但我不知道在scanf面前瓷砖是什么意思 我发现tilde既可以用于析构函数,也可以用于二进制求反,但它看起来并不是两者都可以。没有tilde,代码就不能工作 int main() { char arr; while (~scanf("%c", &arr)){ putchar(arr); } } 我发现tilde既可以用于析构函数,也可以用于二进制求反,但它看起来并不是两者都可以 它应用于sc

我找到了一个代码,它接受输入字符串并将其打印出来

但我不知道在scanf面前瓷砖是什么意思

我发现tilde既可以用于析构函数,也可以用于二进制求反,但它看起来并不是两者都可以。没有tilde,代码就不能工作


int main() {
    char arr;

    while (~scanf("%c", &arr)){
        putchar(arr);
    }
}
我发现tilde既可以用于析构函数,也可以用于二进制求反,但它看起来并不是两者都可以

它应用于
scanf()
的返回值,正如您在后面提到的

没有tilde,代码就不能工作


int main() {
    char arr;

    while (~scanf("%c", &arr)){
        putchar(arr);
    }
}
作为:

scanf
返回它成功扫描的值数或
EOF
如果它到达文件的末尾
EOF
是一个表示 负值。在大多数平台上,
EOF
的值为
(int)-1
。 在这种情况下,取1的-1的补码将使值为0 用于从循环中断开

我发现tilde既可以用于析构函数,也可以用于二进制求反,但它看起来并不是两者都可以

它应用于
scanf()
的返回值,正如您在后面提到的

没有tilde,代码就不能工作


int main() {
    char arr;

    while (~scanf("%c", &arr)){
        putchar(arr);
    }
}
作为:

scanf
返回它成功扫描的值数或
EOF
如果它到达文件的末尾
EOF
是一个表示 负值。在大多数平台上,
EOF
的值为
(int)-1
。 在这种情况下,取1的-1的补码将使值为0 用于从循环中断开


scanf
??你确定要用这个吗?它是c语言的基础。你可以用
std::cin>
来代替。写这篇文章的人要么太聪明了,要么试图写模糊的代码。不管怎样,最好把它扔掉。一次读取一个字符有更好的方法。这是按位NOT运算符。更正式地说,它返回返回值
scanf
的1的补码
scanf
返回它成功扫描的值的数目,或者
EOF
返回它到达文件末尾的值的数目
EOF
是一个表示负值的宏。在大多数平台上,
EOF
的值为
(int)-1
。在这种情况下,取1的
-1
,将使值变为
0
,用于断开循环。(本想将此作为答案发布,但被标记为“重复”对我来说太早了,无法键入)
scanf(“%c”,&arr)==1
会更容易阅读。考虑到I/O是这段代码的实际瓶颈,“优化”在某种程度上是徒劳的(即使它能工作(我有点怀疑失败的
scanf()
可能返回0或EOF,我不确定它何时返回前者或后者)。
scanf
??你确定要用这个吗?它是c语言的基础。你可以用
std::cin>
来代替。写这篇文章的人要么太聪明了,要么试图写模糊的代码。不管怎样,最好把它扔掉。一次读取一个字符有更好的方法。这是按位NOT运算符。更正式地说,它返回返回值
scanf
的1的补码
scanf
返回它成功扫描的值的数目,或者
EOF
返回它到达文件末尾的值的数目
EOF
是一个表示负值的宏。在大多数平台上,
EOF
的值为
(int)-1
。在这种情况下,取1的
-1
,将使值变为
0
,用于断开循环。(本想将此作为答案发布,但被标记为“重复”对我来说太早了,无法键入)
scanf(“%c”,&arr)==1
会更容易阅读。考虑到I/O是这段代码的实际瓶颈,“优化”在某种程度上是徒劳的(即使它能工作(我有点怀疑失败的
scanf()
可能返回0或EOF,我不确定它什么时候执行前者或后者))。