由while(scanf("%d",&n)!=EOF)引出的小问题
来源:互联网 发布:京东广告部算法岗位 编辑:程序博客网 时间:2024/04/30 02:39
说实话,以前没见过这种写法,没注意scanf还有返回值,EOF也没怎么见过。百度了一番,知道EOF是-1(即#define EOF (-1));scanf返回的是成功扫描进的数的个数。如scanf("%d %d",&a, &b),若a、b都输入成功返回2,成功一个返回1,都不成功返回0,错误返回-1。标题那段代码的意思是,输入Ctrl+z终止循环(这是在Windows下,在Unix环境下是Ctrl+d)。如果你输入字符a,而循环体里又没有getchar之类读字符的函数,就会死循环,因为a会一直留在输入缓冲区中。要想在输入错误的情况下终止把 !=EOF 去掉就行了,即成功输入的个数为0的情况下推出循环。
在百度过程中见到有while(~scanf("%d",&n)!=EOF)这种写法,找不到具体的解释。后来找到“~”的解释是是取反,即0变1,1变0。试了一下这种方式在输入错误的情况下就退出循环,也就是说~0的值为-1。想了一下也就通了:计算机是以补码存放数字的,0二进制的八位补码为0000 0000,“取反”后为1111 1111,对应的就是-1的补码了。这里的取反加了引号,因为真正算术上的取反,数字符号位是不变的,即0000 0000的反码是0111 1111,而补码为0111 1111的数字是1。
- 由while(scanf("%d",&n)!=EOF)引出的小问题
- while (scanf("%d",&n)!=EOF)
- while(scanf("%d",&n)!=EOF)
- while(scanf("%d",&n)!=EOF)
- while(scanf("%d",&n)!=EOF)
- while(scanf("%d",&n)!=EOF)
- 选择排序---while( scanf("%d",&n)!= EOF)与getchar()简介及其存在的问题,
- while(scanf("%d",&n),n)和while(scanf("%d",&n)!=EOF)和while(scanf("%d",&n)==1)和while(~scanf("%d",&n)
- ACM之while(scanf("%d",&n)!=EOF)
- ACM之while(scanf("%d",&n)!=EOF)
- while(scanf(“%d”, &n)!= EOF)
- 由scanf("%d",&ch);引出的输入缓冲区问题
- while(scanf("%d",&x) != EOF)的退出方法
- while (scanf("%d", &i) != EOF)
- while(scanf("%d",&n)!=EOF) ——那件小事
- while(~scanf("%d %d",&a,&b))和while(scanf("%d %d",&a,&b)!=EOF)
- while(~scanf("%d %d",&a,&b))和while(scanf("%d %d",&a,&b)!=EOF)
- while(scanf(“%d%d”,&a,&b)!=EOF)循环无法退出问题
- Volatile
- MySQL grant 语法的详细解析
- ecshop会员登录记录用户名
- MemCached 安装配置
- cocos2d-x 2.0.4 android 无法执行bash
- 由while(scanf("%d",&n)!=EOF)引出的小问题
- WPF菜单快捷方式怎么设置
- 如何解决 "Powered by ECShop"每次显示的位置都不同的问题
- 求素数方法
- PowerDesigner 工具生成数据库Report指导
- poj 2739 Sum of Consecutive Prime Numbers
- 《高性能网站建设指南》阅读笔记_规则5- 将样式放在顶部
- ecshop实现后台二次开发后功能模块仍然可以分配权限
- java web项目整体异常处理机制