while(~scanf(“%d“, &n))的含义
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,循环结束。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人