#include<stdio.h>
int main()
{
int i,j,n;
char c1,c2;
printf("请输入一个字母:");
while(scanf("%c",&c2)!=((c2>='a'&&c2<='z')||(c2>='A'&&c2<='Z')) )
{
printf("请输入一个字母:");
scanf("%c",&c2);
}
c1=c2;
if (c1>='a'&&c1<='z')
{
for(i=1;i<=c2-'a'+1;i++)
{
for(j=1;j<=i;j++)
{
for(n=1;n<j;n++)
c1-=1;
printf("%c",c1) ;
c1=c2;
}
printf("\n") ;
}
}
else if(c1>='A'&&c1<='Z')
{
for(i=1;i<=c2-'A'+1;i++)
{
for(j=1;j<=i;j++)
{
for(n=1;n<j;n++)
c1-=1;
printf("%c",c1);
c1=c2;
}
printf("\n");
}
}
return 0;
}
#include<stdio.h>
int main()
{
int i,j,n;
char c1,c2;
printf("请输入一个字母:");
scanf("%c",&c2);
while(!(c2>='a'&&c2<='z')&&!(c2>='A'&&c2<='Z') )
{
printf("请输入一个字母:");
scanf("%c",&c2);
}
c1=c2;
if (c1>='a'&&c1<='z')
{
for(i=1;i<=c2-'a'+1;i++)
{
for(j=1;j<=i;j++)
{
for(n=1;n<j;n++)
c1-=1;
printf("%c",c1) ;
c1=c2;
}
printf("\n") ;
}
}
else if(c1>='A'&&c1<='Z')
{
for(i=1;i<=c2-'A'+1;i++)
{
for(j=1;j<=i;j++)
{
for(n=1;n<j;n++)
c1-=1;
printf("%c",c1);
c1=c2;
}
printf("\n");
}
}
return 0;
}
为什么这两种代码,当输入非法字符时,输出的结果不一样?
while(scanf("%c",&c2)!=((c2>='a'&&c2<='z')||(c2>='A'&&c2<='Z')) )
{
printf("请输入一个字母:");
scanf("%c",&c2);
}
这样当第一次输入一个字符不符合要求时,后续会执行两遍scanf语句的。而第二种就不会
非运算优先级最高,比与运算优先级高