|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ while(~scanf("%d%d", &a, &b))printf("%d\n",a+b);这句不明
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
7650
人关注过本帖
标题:
while(~scanf("%d%d", &a, &b))printf("%d\n",a+b);这句不明 ...
只看楼主
加入收藏
sunb3
来 自:北京
等 级:
论坛游民
威 望:
3
帖 子:34
专家分:94
注 册:2017-4-20
结帖率:
100%
楼主
收藏
已结贴
√
问题点数:10 回复次数:10
while(~scanf("%d%d", &a, &b))printf("%d\n",a+b);这句不明
#include<stdio.h>
int main(){
int a,b;
while(~scanf("%d %d", &a, &b))printf("%d\n",a+b);
return 0;
}
我大概能明白可以一直输入俩数,然后不断输出两个数的和,但是这个while怎么开始?又怎么结束呢?还有这个"~"的作用是什么?
搜索更多相关主题的帖子:
return
2017-05-03 08:42
举报帖子
使用道具
赠送鲜花
吹水佬
等 级:
版主
威 望:
451
帖 子:10607
专家分:43186
注 册:2014-5-20
第
2
楼
收藏
得分:0
~-1 为 0,就是说 scanf()返回-1(EOF)时跳出循环。
2017-05-03 10:00
举报帖子
使用道具
赠送鲜花
sunb3
来 自:北京
等 级:
论坛游民
威 望:
3
帖 子:34
专家分:94
注 册:2017-4-20
第
3
楼
收藏
得分:0
以下是引用
吹水佬
在2017-5-3 10:00:11的发言:
~-1 为 0,就是说 scanf()返回-1(EOF)时跳出循环。
那什么时候scanf()返回-1呢?是在输入内容无效的时候么?
除了基础……我什么都不会……
2017-05-03 10:20
举报帖子
使用道具
赠送鲜花
rjsp
等 级:
版主
威 望:
528
帖 子:9025
专家分:54030
注 册:2011-1-18
第
4
楼
收藏
得分:1
while( ~scanf("%d %d", &a, &b) )
应当写成
while( scanf("%d %d", &a, &b) == 2 )
在ACM比赛时,选手知道不会出现非法或残缺的数据,所以为了节约时间,写成第一种格式
2017-05-03 10:28
举报帖子
使用道具
赠送鲜花
吹水佬
等 级:
版主
威 望:
451
帖 子:10607
专家分:43186
注 册:2014-5-20
第
5
楼
收藏
得分:0
以下是引用
sunb3
在2017-5-3 10:20:22的发言:
那什么时候scanf()返回-1呢?是在输入内容无效的时候么?
试试按 Ctrl+Z 回车
2017-05-03 10:41
举报帖子
使用道具
赠送鲜花
renkejun1942
来 自:不是这样
等 级:
贵宾
威 望:
33
帖 子:1645
专家分:5297
注 册:2016-12-1
第
6
楼
收藏
得分:0
回复 5楼 吹水佬
scanf()出现读取错误才会返回EOF。
当然如楼主发的代码,有2个,输入ctrl+z的确可以终止循环,但对scanf用EOF做结束判断,并不好。
[此贴子已经被作者于2017-5-3 10:51编辑过]
09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-03 10:46
举报帖子
使用道具
赠送鲜花
吹水佬
等 级:
版主
威 望:
451
帖 子:10607
专家分:43186
注 册:2014-5-20
第
7
楼
收藏
得分:1
以下是引用
renkejun1942
在2017-5-3 10:46:41的发言:
不用试。
ctrl+z 对scanf()没什么用。
scanf()出现读取错误才会返回EOF。
我windows平台下有用,这样看看:
#include <stdio.h>
main()
{
int a,b;
printf("%d\n", scanf("%d", &a, &b));
}
其他平台或者可试试 Ctrl+D
2017-05-03 10:51
举报帖子
使用道具
赠送鲜花
renkejun1942
来 自:不是这样
等 级:
贵宾
威 望:
33
帖 子:1645
专家分:5297
注 册:2016-12-1
第
8
楼
收藏
得分:1
回复 7楼 吹水佬
试了下,竟然还真有用。
我就记得我被这个坑过一次,输入Ctrl+Z怎么都结束不了循环。
09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-03 10:57
举报帖子
使用道具
赠送鲜花
sunb3
来 自:北京
等 级:
论坛游民
威 望:
3
帖 子:34
专家分:94
注 册:2017-4-20
第
9
楼
收藏
得分:0
Ctrl+D在Linux经常用,没想到就是这个啊……
以下是引用
rjsp
在2017-5-3 10:28:37的发言:
while( ~scanf("%d %d", &a, &b) )
应当写成
while( scanf("%d %d", &a, &b) == 2 )
在ACM比赛时,选手知道不会出现非法或残缺的数据,所以为了节约时间,写成第一种格式
这个的确是什么ACM的题,ACM是赛什么的?…………不重要……
while( scanf("%d %d", &a, &b) == 2 )又是啥?……我有点懵了……
话说~scanf()是-1么?还是说Ctrl+D生成的EOF是-1?
除了基础……我什么都不会……
2017-05-03 15:10
举报帖子
使用道具
赠送鲜花
rjsp
等 级:
版主
威 望:
528
帖 子:9025
专家分:54030
注 册:2011-1-18
第
10
楼
收藏
得分:5
以下是引用
sunb3
在2017-5-3 15:10:43的发言:
while( scanf("%d %d", &a, &b) == 2 )又是啥?
话说~scanf()是-1么?还是说Ctrl+D生成的EOF是-1?
scanf 返回正确读入的字段数目,假如发生错误,返回 EOF
以 scanf("%d %d", &a, &b) 为例,它可能返回
EOF
、
0
、
1
、
2
如果发生了错误(比如无内容可读),返回EOF;
如果第一个%d格式就不对,返回0
如果第二个%d格式不对,返回1
如果第二个%d格式也对了,返回2
while( scanf("%d %d", &a, &b) == 2 ) 就是 a和b 都读成功了
Ctrl+D并不生成“EOF”,EOF是scanf的一种可能的返回值。
收到的鲜花
sunb3
于
2017-05-11 10:46
送鲜花
50朵 附言:非常感谢,我瞬间理解明白了T_T
2017-05-04 09:43
举报帖子
使用道具
赠送鲜花
11
1/2页
1
2
快速回复:
while(~scanf("%d%d", &a, &b))printf("%d\n",a+b);这句不明 ...
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.018471 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved