回 帖 发 新 帖 刷新版面

主题:求助

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
main()
{char s[6],*p; int i,n;
printf("enter a string (octal digits):\n");
gets(s);
if(strlen(s)>5)
{ printf("error :string too longer!\n");
  exit(0);
}
 for(i=0;s[i];i++)
if((s[i]<'0')||(s[i]>'7'))
{ printf("error :it is not octal digits !\n");
exit(0);
}
printf("the octal string:\n");
puts(s);
p=s;
n=*p-'0;
p++;
while(*p!=\0)
{ n=n*8+*p-'0';
p++;
}
printf("%s is converted to integer number :%d\n",s,n);
}
这段代码的意思是将输入的最多为5为数的八进制数转化为十进制数,但代码中的
n=*p-'0;
p++;
while(*p!=\0)
{ n=n*8+*p-'0';
p++;
我看不太明白,请那位高手帮帮忙!!!本人将不胜感激。

回复列表 (共7个回复)

沙发

n=*p-'0;
首先,这里缺了个'
应该是
n=*p-'0';意思是把那一位p里的字符转化成对应的数字赋给n
p++,就是下标右移。后面的类推你应该可以看懂了吧
while的条件写的也有点问题,要么应该写*p!=0要么写*p!='\0'

板凳

n=*p-'0;
应该是n=*p-'0';吧。把字符串的数字改成实际的数字。例如'5'-'0'=5;

3 楼

拜托,让大家来看的话起码让自己的代码更容易看一些吧,最起码要有缩进吧.一看到这种代码就没心思了

4 楼

谢谢各位大侠,能再清楚点吗?为什么要利用n=*p-'0';呢

5 楼

*p的ASCII码减去'0'的ASCII码,举例说就是'2'-'0'=2

6 楼


‘0’为ACSII码中的48

7 楼


数组是char型变量  以ascii格式存放的  你要将元素转化为数字 就得减去一个‘0’ 两个char相减得到的是他俩的ASCII吗的差值 你看看课本上数字的ASCII码撒

我来回复

您尚未登录,请登录后再回复。点此登录或注册