while(〜scanf在C语言中是什么意思?

时间:2019-10-23 09:39:59

标签: c

我看了一些代码,但我不知道while(~scanf

的含义
while(~scanf("%s", word+1) !=EOF)
{
    int a= strlen(word+1);

我已经搜索过google,但对此一无所获。请帮助

2 个答案:

答案 0 :(得分:5)

分析表达式while(~scanf("%s", word+1) != EOF)

  

只要scanf的按位取反的返回值不等于EOF的值,就运行。

分析等效表达式while(scanf("%s", word+1) != ~EOF)

  

只要返回scanf的返回值不等于EOF的按位取反的值,就运行。

假设EOF通常为1,则该表达式本质上等效于:

while(scanf("%s", word+1) != 0)

意思是:

  

只要scanf的返回值不是0,就运行。

或者简单地:

  

运行直到scanf的返回值为0

对于这种分析是否正确,我仍在scratch头。

求职面试的好问题(以及如何不编写代码的好例子)。

答案 1 :(得分:0)

成功时,scanf将返回成功匹配的输入项目数。在这种情况下,只有一个输入项要匹配,因此,成功时scanf将返回1,上面的代码将按位取反1,使其变为-2。由于-2!= EOF,因此循环不会结束。由于EOF的值为-1。

如果scanf遇到错误或到达输入结尾,例如由于用户按下Ctrl-D,它将返回EOF,并且不会在存储位置word + 1中放置新值。该代码将按位反转EOF,该值变为0,因为〜EOF = 0。由于0!= EOF,循环不会结束。对strlen的调用将返回调用scanf之前在内存位置word + 1中的字符串的长度。

仅当scanf返回0时,循环才会结束,因为〜0 = -1 = EOF。仅当scanf无法将输入与转换说明符“%s”的字符串匹配时,才会发生这种情况。