#include
#include
int main(void){
char ch;
long number=0;
while((ch=getchar())<'0'||ch>'6')
;
while(ch!='?'&&ch>='0'&&ch<='6'){
number=number*7+ch-'0';
printf("%ld#",number);
ch=getchar();
}
printf("\n");
}
while ((ch = getchar()) < '0' || ch > '6');如果输入的不是0-6之间的字符,这个循环就会一直执行getchar(),如果遇到一个0-6之间的字符,就把这个字符赋值给ch。
while (ch!= '?' && ch >= '0' && ch<= '6')这句意思就是如果ch!=‘?’和ch>='0'和ch<=‘6’这3个条件有一个为假时退出循环,否则执行循环体。
当你输入c2470f?的时候,第一个循环读到c字符的适合不满足退出条件,所以继续执行getchar();读到2字符的时候,满足条件退出循环。
这时候到第二个循环,ch = ‘2’满足循环条件,所以执行循环体,ch-'0'就是把char型转换成了int型,是按字符的ascii码计算的,在这里就是把数字字符转换成了数字,所以number = 0*7+2 = 2;
打印出2#,然后下一个getchar读到了‘4’,还满足第二个循环条件,这个时候number = 2了,所以在执行 number =number * 7 + ch - '0';的时候number = 2*7+4 = 18,打印出18#,再次执行getchar的时候ch=‘7’,不满足循环条件,所以退出了。
所以打印结果就是2#18#
输入字符,如果该字符小于0或者大于6,则不进行操作,继续输入字符,如果该字符在0-6之间,则进行number=number*7+该字符-0;由例子说明一下。一开始出入C,,不在0-6之间,不进行操作,接着输入2,满足0-6.初始number为0.进行number=number*7+该字符-0运算。0*7+2-0=2,number为2输出2#.接着输入4,满足0-6.进行number=number*7+该字符-0运算。2*7+4-0=18.输出18#,后面的输入都不满足0-6之间。所以输出就是2#18#
如果还有不理解,请追问。
是将7进制数转成10进制数