又蒙B了,一个关于while(scanf()==1)的问题
C Primer Plus 117页中提到
下面的结构:
status = scanf("%ld",&num);
while(status == 1)
{
/* loop actions*/
status = scanf ("%ld",&num);
}
可以用下列形式代替:
while(scanf("%ld",&num) == 1)
{
/* loop actions */
}
可为什么我下的的代码,如果不加后面的 scanf("%c",&ch); 就会直接退出循环???
---------------------
---------------------
//C Primer Plus 第六章 编程练习4
#include <stdio.h>
int main (void)
{
char ch;
int h,i,j,k;
printf("Please enter a capital(1 to quit)\n");
//用scanf的返回值作为判断条件,排除小写字母,数字空格,换行符等特殊字符(&&是第七章的内容,在这里用只是为了程序更严密)
while((scanf("%c",&ch)) == 1 && ch >= 'A' && ch <= 'Z')
{
for(h = 0; h <= ch - 'A'; h++) //打印行数
{
for(i = h; i < ch - 'A'; i++) //打印空格
printf(" ");
for(j = 0; j <= h; j++) //打印升序字母
printf("%c",'A'+j);
for(k = 1; k <= h; k++) //打印降序字母
printf("%c",'A'+h-k);
printf("\n");
}
printf("Please enter a capital(1 to quit)\n");
scanf("%c",&ch);
}
printf("Over");
return 0;
}
[解决办法]
估计是回车,换行,的问题导致的。
输入字母后,按回车。这时传了个\n\r过去。输入的字符+“\n”被认为是一次输入,"\r"被认为是一次输入。
然后,第二次输入时scanf返回值为0.
然后你的程序就悲剧了。