while(scanf("%d",&n),n),while(scanf("%d",&n)!=EOF),while(scanf("%d",&n)==1)和while(~scanf("%d",&n))

##算法题目中经常会用到几个while语句,能够同时输入和判断,比较好用

1、while(scanf("%d",&n),n)

功能:当n为0时中止循环

这里要先说一下逗号表达式:逗号表达式的值是逗号后面的那个数。例如x=(5,6),则x=6。

while(scanf("%d",&n),n)括号里的语句其实就是个逗号表达式,它的返回值是n的值,所以这个语句就相当于while(n),n=0时跳出循环,写成这样是为了输入。

如果是while(scanf("%d%d",&n,&m,),n,m),那么就相当于while(m)。

2、while(scanf("%d",&n)!=EOF)和while(~scanf("%d",&n))

功能:当读到文件结尾时中止循环

scanf语句的返回值为成功赋值的个数,例如scanf("%d %d",&a,&b),如果a、b均赋值成功返回值为2,只是a赋值成功返回1,a、b都不成功返回0,出错的时候返回EOF。

~是按位取反,scanf语句如果没有输入值就是返回-1,按位取反结果为0。

注意:这两种方法在输入字母的时候会变成死循环,而scanf("%d %d",&a,&b)==2不会。windows下可通过按“Ctrl +Z”、linux下可通过“Ctrl + D”来来达到“输入”文件结束符的效果,结束循环。

3、while(scanf("%d",&n)==1)

功能:赋值失败,跳出循环

这个应该很好理解了吧,如果是scanf("%d%d",&n,&m就是while(scanf("%d %d",&a,&b)==2)。

 

 

你可能感兴趣的:(算法)