另外顺带问一句 while (scanf ("%d%d",&m,&n )==2 && m && n )
中的 && m && n
的用处是?
1
tomb003 2015-08-31 23:17:05 +08:00
检验输入的 m 和 n 的值不为 0 才进入循环
|
2
kangkang 2015-08-31 23:33:13 +08:00
while (scanf ("%d%d",&m,&n )&&(m||n ));?
|
3
algas 2015-09-01 00:39:39 +08:00
scanf ()的返回值解释: These functions return the number of input items successfully matched and assigned 。
所以 while 中的的第一个判断是保证确实读入了两个数,==2 返回 1 ; &&m 和&&n 使得 m 和 n 中存在一个 0 的时候, while ()中的条件整体为 0 。应该起不到标题里的作用。 |
4
harttle 2015-09-01 01:13:09 +08:00
我猜我理解你的意思了, while (scanf ("%d %d",&m,&n )==2 && m && n ) 就可以读到两个零时停止。但需要注意:
* 你的输入必须是无歧义的:比如对于输入“ 2200 ”会被作为一个 int 读入到 m 中,所以需要空格分隔,比如: 2 2 0 0 。所以 scanf 的参数里面的两个%d 之间也要有空格; * &&m && n 的含义: while (<expr>)括号中的<expr>表达式的值是 while 的循环条件,值为 0 ( false )时停止循环。而&&是与操作符,就是说: scanf (...) == 2 (读入了两个数)并且 m 不为零并且 n 不为零时,循环才继续。 关于 scanf 的返回值: On success, the function returns the number of items of the argument list successfully filled. 当成功时,函数返回参数列表中成功填充的项的数目。 参见 http://www.cplusplus.com/reference/cstdio/scanf/ |
5
spencerqiu OP |
6
ljbha007 2015-09-01 07:39:21 +08:00
@spencerqiu
是一样的 而且读起来还轻松很多 |
7
algas 2015-09-01 10:38:19 +08:00
@spencerqiu
这个是说有一个 0 就会停止循环,而不是 m 和 n 同时为 0 时跳出循环。 同时为 0 ,应该使用 if (m==0 && n==0 ) break; 另外, while (scanf ("%d %d",&m,&n )==2 )会在你输入 1 a ,这样的情况下终止循环, 所以,如果需要读入 0 0 停止循环,可以简单的写成: while (1 ) { scanf ("%d %d", &n, &m ); if (n==0 && m==0 ) break; } |
8
sparkrat 2015-09-01 13:50:37 +08:00
while (~scanf ("%d%d", &m, &n ) && m+n ){
// balabala } |