当前位置: 代码迷 >> C语言 >> [求助]为什么不对,错在什么地方???????????
  详细解决方案

[求助]为什么不对,错在什么地方???????????

热度:178   发布时间:2006-11-11 22:14:59.0
[求助]为什么不对,错在什么地方???????????

题目要求是将一个整数N转换成字符串,例如,输入483..应该输出"483", N的位数不确定,可以是任意位数的整数....仅希望大家指出我这个程序中的错误...不需要其它的实现方法....谢谢...程序中的注释是我的思路

void fun(long a , char *p) /*将整数转换成字符串的函数,转换后反序存入字符数组p*/
{
if(a<10) /*判断a是否为一位数,要是直接送到*p中*/
*p=a+'0'; /*把数字转换成字符*/
else /*不是一位数的情况*/
{
*(p++)=a%10+'0'; /*把a个位数字转换成字符存入*p,并使p指向字符数组下一个*/
fun(a/10,p); /*递归调用,a/10就可以把刚才已经存过的个位去掉*/
}
*p='\0'; /*给字符数组最后加上一个结束标志*/
}

void main()
{long a;
char p[10],temp;
int i;
scanf("%ld",&a); /*输入整数*/
fun(a,p); /*函数调用*/
for(i=0;i<=strlen(p)/2;i++) /*由于函数是反序存储,这里进行倒序*/
{temp=p[i];
p[i]=p[strlen(p)-i];
p[strlen(p)-i]=temp;
}
puts(p); /*输出转换过的字符数组*/
getch();
}

搜索更多相关的解决方案: 字符串  color  

----------------解决方案--------------------------------------------------------
我看了你的程序,发现了你的错误,如下:

1〉 *p='\0'; /*给字符数组最后加上一个结束标志*/
这句应该放在 if 条件后面,你想想是不是 ?

2〉 for(i=0;i<=strlen(p)/2;i++) /*由于函数是反序存储,这里进行倒序*/
{temp=p[i];
p[i]=p[strlen(p)-i];
p[strlen(p)-i]=temp;
}
这个算法写错了,不信的话你在 for 前面加一个puts看看(先把 1 错误改正后)
----------------解决方案--------------------------------------------------------
谢谢楼上的....经过更改...程序如下
void fun(long a , char p[])
{
if(a<10)
{*p=a+'0';
*++p='\0';
}
else
{
*(p++)=a%10+'0';
fun(a/10,p);
}

}

void main()
{long a;
char p[10],temp;
int i;
scanf("%ld",&a);
fun(a,p);
for(i=0;i<=strlen(p)/2-1;i++)
{temp=p[i];
p[i]=p[strlen(p)-i-1];
p[strlen(p)-i-1]=temp;
}
puts(p);
getch();
}

[此贴子已经被作者于2006-11-12 0:01:16编辑过]


----------------解决方案--------------------------------------------------------
终于想通了为什么*++p='\0';不能放在函数最后的那个位置了....因为递归每次都会执行...这样在倒数第二次递归的时候就给*p后面加上了个\0...这样在输出在时候遇到这个\0就会停止...尽管后面还有字符....

呵呵....谢谢二楼....

那个数组字符交换错误由于大意造成....发现了

[此贴子已经被作者于2006-11-11 23:38:51编辑过]


----------------解决方案--------------------------------------------------------


不客气 。。。
----------------解决方案--------------------------------------------------------
  相关解决方案