while(~scanf(“%d“, &n))的含义

发布时间 2023-06-19 14:31:56作者: 一统天下。

canf("%d%d", &a, &b);
如果a和b都被成功读入,那么scanf的返回值就是2;如果只有a被成功读入,返回值为1;如果a和b都未被成功读入,返回值为0;如果遇到错误或遇到end of file,返回值为EOF,且返回值为int型。

注:这里返回值为2,就是输入的a,b都匹配,返回值为1就是输入的a,b只有一个匹配,返回值为0就是当用户输入不匹配的时候就返回零。例如:

int main()
{
int a = 0, b = 0;
int re = scanf("%d %d", &a,&b);
printf("%d\n", re);
return 0;
}

while(~scanf("%d", &n)) 等价于 while(scanf("%d",&n)!=EOF)
EOF,为End Of File的缩写,通常在文本的最后存在此字符表示资料结束。EOF通常的值为-1。

while(~scanf("%d", &n)) 意思就是当有值输入的时候,进入while,当没有值输入时就结束while。(输入了值,如果scanf成功读取了就返回1,取反的结果不为0,进入while;如果scanf没有成功读取,返回0,取反的结果不为0,进入while;如果没有输入,到达文件末尾则返回-1,取反的结果为0,结束while。)

注意:在终端(黑框)中手动输入时,系统并不知道什么时候到达了所谓的“文件末尾”,因此需要用<Ctrl + z>组合键然后按 Enter 键的方式来告诉系统已经到了EOF,这样系统才会结束while.

这个程序当我输入1,scanf返回1,取反为-2,进入循环,打印a=1,re=-2;

循环继续,当我输入4,scanf返回1,取反为-2,进入循环,打印a=4,re=-2;

循环继续,当我输入b,scanf读取失败,返回0,取反为-1,进入循环,此时a还是等于4,打印a=4,re=-1。

循环继续,当我输入ctrl+z,再按下enter,告诉程序已经到了EOF(通常EOF=-1),取反为0,循环结束。