请问有没有C语言大神指点我这个程序究竟是怎么运行?是做什么功能的?有运行截图!求解,谢谢

#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");
}

图片说明

4个回答

 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#

如果还有不理解,请追问。

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复qq_31429225: 第一,getchar()得到的就是char类型,第二,char只占用1个字节,并且可以完成任务,不需要4个字节的int。如果我们可以用少的内存就没有必要浪费。
接近 2 年之前 回复
qq_31429225
EveryLink 谢谢! 还有请问这个程序既然是七进制转换为十进制的功能,为什么要使用char型,而不直接使用int型呢?
接近 2 年之前 回复

是将7进制数转成10进制数

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!