猿问

为什么要将itoa(n,str+6);改成itoa(n,str+5) 最后怎么输入STR 谢谢

/*
*在考生目录的Paper子目录下,有Modify.c文件,该文件中“/ ***** N ***** /”的下一行中有错误,
*请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
*该程序功能:用递归法将一个六位整数n转换成字符串,例如输入123456,应输出字符串"123456"。
*/
#include<stdio.h>
void itoa(long i,char *s)
{
if(i==0)
return;
/****** 1 ******/
*s = '0'+i%10;//*s = '1'+i%10;
itoa(i/10,s-1);
}
void main()
{
long n;
char str[7]="";
scanf("%ld",&n);
/****** 2 ******/
itoa(n,str+5);//itoa(n,str+6);
printf("%s",str);
}
itoa(n,str+5)什么意思?

哔哔one
浏览 133回答 3
3回答

隔江千里

对串“123456”来说, 从str到str+5,因为是从0开始算的,没有到str+6;因为每次递归的时候都有把s〔k〕赋值啊,当i==0时结束,此时s=str-1;然后回朔,则刚好s=str时,*s='0'+1;然后s++;则*s='0'+2;以此类推。就可以得到串s="123456" 了;因为你str有7个空间,且str[6]='\0';所以可以%s 输出 了。

catspeake

itoa()函数将整数转换为对应的字符串,保存到指定的字符数组中,itoa(n,str+5)将n转换为字符串,保存到str+5字符数组中。

郎朗坤

1 *s = '0'+i%10;//*s = '1'+i%10;是因为 '0'+3=>'3','0'+4=>'4',('0'的asc码是48)&nbsp;2 itoa(n,str+5);//itoa(n,str+6);&nbsp;是因为你输入的123456是六位数,数组char str[7]=""是七位从str[0]到str[6],但str[6]得存放字符串'123456'后的'\0'结束字符,所以有效的是str[0]到str[5],所以得是itoa(n,str+5)而不是itoa(n,str+6);
随时随地看视频慕课网APP
我要回答